2012-03-06 27 views
9

Estoy usando el tema Chromatron para un panel de administración en mi aplicación. Hay un gadget de barra lateral que tiene contenido HTML y con un pequeño truco de CSS se puede mostrar completamente diferente.¿Cómo puedo pasar contenido HTML a una vista parcial en MVC-Razor como un bloque "para"

<section class="sidebar nested"> 
    <h2>Nested Section</h2> 
    <p>Lorem ipsum dolor sit amet, conse ctetur adipiscing elit. Maec enas id augue ac metu aliquam.</p> 
    <p>Sed pharetra placerat est suscipit sagittis. Phasellus <a href="#">aliquam</a> males uada blandit. Donec adipiscing sem erat.</p> 
</section> 

Quiero tener una vista parcial que se utiliza como esto:

@Html.Partial("Path/To/Partial/View"){ 
    <h2>Nested Section</h2> 
    <p>Lorem ipsum dolor sit amet, conse ctetur adipiscing elit. Maec enas id augue ac metu aliquam.</p> 
    <p>Sed pharetra placerat est suscipit sagittis. Phasellus <a href="#">aliquam</a> males uada blandit. Donec adipiscing sem erat.</p> 
} 

TBH, quiero tener la funcionalidad que tengo en un bloque @for(...){ }. ¿Es esto posible en Razor?

+1

No sé si es lo que quiere, pero eche un vistazo: http://lostechies.com/hugobonacci/2011/07/11/templates-with-razor/ –

+0

Gracias Felipe. pero esto no es lo que estoy buscando, o quizás no puedo hacer que funcione. Necesito la misma funcionalidad que los bloques 'for'. Quiero tener un bloque final donde pueda insertar otras directivas '@' razor o contenido HTML; exactamente como un bloque 'for' ... – Achilles

+0

Estoy tratando de hacer lo mismo; ver mi [* muy similar * ASUNTO pregunta] (http://stackoverflow.com/q/21760850/173497). Lo más parecido que he encontrado es la publicación de @FelipeOriani. También funciona un método de extensión 'HtmlHelper', pero no he descubierto almacenar el HTML que utiliza como vista o vista parcial. Pero, realmente, solo tuve que renunciar a la sintaxis del bloque de corchetes para la sintaxis de la función auxiliar. –

Respuesta

15

Estaba teniendo el mismo dilema. Intenta crear un tipo de modelo de vista con una propiedad Func y luego pasa el html como delegado.

public class ContainerViewModel 
{ 
    public String Caption { get; set; } 
    public String Name { get; set; } 
    public Int32 Width { get; set; } 
    public Func<object, IHtmlString> Content { get; set; } 
} 

@Html.Partial("Container", new ContainerViewModel() 
{ 
    Name = "test", 
    Caption = "Test container", 
    Content = 
    @<text> 
     <h1>Hello World</h1> 
    </text>, 
    Width = 600 
}) 

Puedes llamarlo así en tu parcial.

@Model.Content(null) 

Espero que esto funcione para usted.

Funciona porque la sintaxis @ ... crea un poco de HtmlHelper para usted que consume un modelo (que usted está declarando aquí como tipo object, y pasando por null), y devuelve un IHtmlString.

CUIDADO Los valores del formulario no parecen publicarse en el servidor si @ Html.BeginForm se usa en el contenido.

Por lo tanto, envuelva su formulario alrededor del contenedor.

+1

Me encanta esta solución, pero la

+0

¡Esta solución es absolutamente brillante! Puedo crear mis widgets/parciales con contenido HTML circundante e inyectar el contenido dentro de este utilizando este método. ¡Está limpio y funciona muy bien! ¡Gracias! –

0

Parece que desea algún tipo de función htmlhelper para generar ese contenido. ¿Has buscado implementarlo como ayuda en lugar de como una vista parcial?

+0

He examinado "Inline Helpers" y hace el trabajo; en realidad hay algunas maneras de pasar contenido a un titular de lugar; pero creo que mi código HTML se verá mucho más limpio si pudiera usar una notación como la que he mostrado arriba. – Achilles

Cuestiones relacionadas