¿Cómo funciona el asistente de HTML, renderPartial, funciona? ¿Cómo puedo aplicar un ayudante que puede traer en el contenido de una vista parcial?

StackOverflow https://stackoverflow.com/questions/1283079

Pregunta

Cuando se utiliza Html.RenderPartial es toma el nombre de la vista que desea hacer, y hace que su contenido en ese lugar.

Me gustaría implementar algo similar. Me gustaría que tomar 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 hacer esto?

¿Fue útil?

Solución

Las extensiones renderPartial están programados para rendir directamente al objeto de respuesta ... se puede ver esto en el código fuente para ellos:

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

Esto significa que si cambia su enfoque un poco, es probable que 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>");
    }
}

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

Otros consejos

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

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top