Comment l'Aide Html, RenderPartial, travailler? Comment puis-je mettre en œuvre une aide qui peut apporter dans le contenu d'une vue partielle?
-
16-09-2019 - |
Question
Lorsque vous utilisez Html.RenderPartial est prend le nom de la vue que vous voulez rendre, et rend son contenu à cet endroit.
Je voudrais mettre en œuvre quelque chose de similaire. Je voudrais à prendre le nom de la vue que vous voulez rendre, ainsi que quelques autres variables, et rendre le contenu dans un récipient ..
Par exemple:
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();
}
}
Quelqu'un sait comment faire cela?
La solution
Les extensions renderPartial sont programmées pour rendre directement à l'objet Response ... vous pouvez le voir dans le code source pour eux:
....).Render(viewContext, this.ViewContext.HttpContext.Response.Output);
Cela signifie que si vous changez votre approche un peu, vous pouvez probablement accomplir ce que vous voulez. Plutôt que de tout à un annexant StringBuilder, vous pourriez faire quelque chose comme ceci:
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>");
}
}
Notez que l'inclusion System.Web.Mvc.Html vous permet d'accéder aux méthodes RenderPartial ().
Autres conseils
Nous fixons cela dans MVC 2. Vous pourrez appeler Html.Partial () et obtenir le contenu réel de la vue comme une chaîne.
Pourquoi ne pas créer un second point de vue et ont la partie à l'intérieur qui, passer Nom comme ViewData ou dans le modèle etc ..
Quelque chose comme:
<div id='<%= ViewData["Name"] + "_Window"%>' class='window'>
<% Html.RenderPartial(ViewData["Name"]); %>
</div>
Hope qui aide, Dan