Comment l'Aide Html, RenderPartial, travailler? Comment puis-je mettre en œuvre une aide qui peut apporter dans le contenu d'une vue partielle?

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

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?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top