2009-08-15 12 views
6

Cuando utiliza Html.RenderPartial toma el nombre de la vista que desea representar y muestra su contenido en ese lugar.¿Cómo funciona Html Helper, RenderPartial? ¿Cómo puedo implementar un ayudante que pueda traer contenido desde una vista parcial?

Me gustaría implementar algo similar. Me gustaría que tome el nombre de la vista que desea representar, junto con algunas otras variables, y hacer que el contenido dentro de un recipiente ..

Por ejemplo:

public static class WindowHelper 
{ 
    public static string Window(this HtmlHelper helper, string name, string viewName) 
    { 
     var sb = new StringBuilder(); 

     sb.Append("<div id='" + name + "_Window' class='window'>"); 
     //Add the contents of the partial view to the string builder. 
     sb.Append("</div>"); 

     return sb.ToString(); 
    } 
} 

Alguien sabe cómo hacerlo ¿esta?

Respuesta

8

Las extensiones RenderPartial están programadas para representarse directamente en el objeto Response ... puede ver esto en el código fuente para ellas:

....).Render(viewContext, this.ViewContext.HttpContext.Response.Output); 

Esto significa que si cambia su enfoque un poco, probablemente pueda lograr lo que desea. En lugar de anexar todo a un StringBuilder, se podría hacer algo como esto:

using System.Web.Mvc.Html; 

public static class WindowHelper 
{ 
    public static void Window(this HtmlHelper helper, string name, string viewName) 
    { 
     var response = helper.ViewContext.HttpContext.Response; 
     response.Write("<div id='" + name + "_Window' class='window'>"); 

     //Add the contents of the partial view to the string builder. 
     helper.RenderPartial(viewName); 

     response.Write("</div>"); 
    } 
} 

Nota que la inclusión de System.Web.Mvc.Html le permite el acceso a los métodos renderPartial().

0

Por qué no crear una segunda vista parcial y tienen el interior que, como pasar Nombre ViewData o en el modelo etc ..

Algo así como:

<div id='<%= ViewData["Name"] + "_Window"%>' class='window'> 
    <% Html.RenderPartial(ViewData["Name"]); %> 
</div> 

Espero que ayude, Dan

8

Estamos arreglando esto en MVC 2. Podrá llamar a Html.Partial() y obtener el contenido real de la vista como una cadena.

+0

Agradable. - – womp

Cuestiones relacionadas