Как работает HTML-помощник RenderPartial?Как я могу реализовать помощника, который может получать контент из частичного представления?

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

Вопрос

Когда вы используете Html.RenderPartial, он принимает имя представления, которое вы хотите отобразить, и отображает его содержимое в этом месте.

Я хотел бы реализовать что-то подобное.Я бы хотел, чтобы оно взяло имя представления, которое вы хотите отобразить, а также некоторые другие переменные и отобразило содержимое внутри контейнера.

Например:

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();
    }
}

Кто-нибудь знает, как это сделать?

Это было полезно?

Решение

Расширения RenderPartial запрограммированы для рендеринга непосредственно в объект Response...вы можете увидеть это в исходном коде для них:

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

Это означает, что если вы немного измените свой подход, вы, вероятно, сможете добиться того, чего хотите.Вместо того, чтобы добавлять все в StringBuilder, вы могли бы сделать что-то вроде этого:

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>");
    }
}

Обратите внимание, что включение System.Web.Mvc.Html позволяет получить доступ к методам RenderPartial().

Другие советы

Мы исправляем это в MVC 2.Вы сможете вызвать Html.Partial() и получить фактическое содержимое представления в виде строки.

Почему бы не создать второе представление и не разместить внутри него частичную часть, передать имя как ViewData или в модели и т. д.

Что-то вроде:

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

Надеюсь, это поможет, Дэн

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top