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
каждый раз, когда вам нужно