¿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?
-
16-09-2019 - |
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?
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