2012-03-20 4 views
0

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

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

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

ответ

1

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

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

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

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

Вы бы также должны вызвать либо ToHtmlString() или ToString() для получить фактическую строку (метод возвращает MvcHtmlString. –

+0

@JustinNiessner Хороший улов, спасибо! Обновлен мой ответ. –

+0

Может работать .. но что, если я хотел бы сделать что-то вроде: пространства имен PMT.Core.Helpers { общественного класса MenuHelper { общественности статической строки HeadMenu (это HtmlHelper помощник) { возвращение Html.Partial (» YourPartialViewName ", partialViewModel) .ToHtmlString(); }} } может быть не лучший пример, но Ill думаю, вы получите идею :) – Inx

1

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

0

Я хотел бы сделать это таким образом

Определить данные, которые вы себе представить, чтобы перейти к вашей 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 каждый раз вам нужно