PartialView как HtmlHelper?

Хорошо... здесь мы идем... самый странный и самый запутанный вопрос месяца:) Я хотел бы создать HtmlHelper, который каким-то образом отображает HTML, но использует частичное представление для своего шаблона того, как HTML должен отображаться, так что Проще говоря... я хотел бы сделать точно так же, как "обычный" контроллер и представление делает.. получить некоторые данные, передать их в представление и затем визуализировать HTML, но в этом случае я хотел бы передать некоторые данные в частичное представление, а затем получить возвращенный html в виде строки, а затем вернуть этот html из метода HtmlHelper... Таким образом, я хотел бы иметь возможность написать, например, @Html.HeadMenu, который затем будет возвращать HTML для заголовка, но я также мог бы в любое время без перекомпиляции иметь возможность изменить HTML.. так как все это в частичном виде... и мне не придется беспокоиться о каких-либо вещах на стороне сервера... и я буду также получите выгоду от intellisense, так как мой метод будет отображаться в @Html.

Я надеюсь, что вы поймете это.. так как это трудно объяснить..

Заранее спасибо!

3 ответа

Решение

Как насчет метода частичного HTML-расширения? Похоже, что вы пытаетесь достичь правильного результата?

@{
var htmlString = Html.Partial("YourPartialViewName").ToString();
}

Он также перегружен, так что вы можете передать модель в частичное представление:

@{
var htmlString = Html.Partial("YourPartialViewName", partialViewModel).ToString();
}

Вы могли бы искать Html.RenderAction(actionName, controllerName, routeValues) метод.

Я бы сделал это так

Определите данные, которые вы хотите передать в htmlhelper

public class HeadMenuViewModel
{
    public string SomeProperty {get;set;}
}

Определить вид по имени HeadMenuViewModel.cshtml в Views/Shared/DisplayTemplates

@model HeadMenuViewModel
<div>
 ////
</div>

Теперь вы можете отображать свои данные, используя

@Html.DisplayFor(model => model.HeadMenu)

И вы могли бы написать именованное ярлык-расширение для него

    using System.Web.Mvc.Html;
...
    public static MvcHtmlString HeadMenu<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression)
    {
       return helper.DisplayFor(expression);
    }

Теперь измените свой HeadMenuViewModel.cshtml каждый раз, когда вам нужно

Другие вопросы по тегам