2012-03-20 52 views
0

好吧..這裏我們去..最奇怪和最令人困惑的月份問題:) 我想創建一個HtmlHelper,一些如何呈現HTML,但使用部分視圖爲它的模板應該如何呈現HTML ,所以把它更簡單..我想做一個完全相同的「正常」控制器和視圖..獲取一些數據,傳遞給視圖,然後呈現HTML,但在這種情況下,我想將某些數據傳遞給部分視圖,然後將返回的html作爲字符串獲取,然後從HtmlHelper方法返回該HTML ... 以這種方式,我希望能夠編寫實例@ Html.HeadMenu,然後將返回headmenu的HTML,但我也可以在任何時候不重新編譯能夠改變的HTML ..因爲它的全部在一個局部視圖..我不會擔心任何服務器端的東西。 。我也會得到好處因爲我的方法將會出現在@Html中,所以這是智能感知。部分視圖爲HtmlHelper?

我希望你能理解this..since同類很難解釋..

提前感謝!

回答

1

Partial HTML擴展方法怎麼樣,聽起來像你正在努力實現的權利?

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

它還具有過載,這樣就可以通過一個模型的局部視圖:

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

你也不得不打電話或者ToHtmlString()或toString()方法來獲取一個實際的字符串(該方法返回一個MvcHtmlString。 – 2012-03-20 13:29:24

+0

@JustinNiessner好的,趕緊,謝謝!更新了我的答案。 – 2012-03-20 13:30:30

+0

可能工作..但如果我想這樣做: 命名空間PMT.Core.Helpers { 公共類MenuHelper { 公共靜態字符串HeadMenu(此的HtmlHelper助手) { 回報Html.Partial(」 YourPartialViewName「,partialViewModel).ToHtmlString(); }} } 可能不是最好的例子,但不適猜測你的想法:) – Inx 2012-03-20 13:35:55

1

你可能會尋找Html.RenderAction(actionName, controllerName, routeValues)方法。

0

我會做這樣

定義你想象的數據傳遞給你的HtmlHelper

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

Views/Shared/DisplayTemplates

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

定義視圖命名爲HeadMenuViewModel.cshtml從現在開始,你可以使用

顯示您的數據
@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每次你需要