2011-03-28 50 views
1

我正在構建一個狀態機,它根據某些動態值在頁面上顯示不同的動作控件(局部視圖)。ASP.NET MVC3以擴展方法編程導入視圖內容

我開始編寫HtmlHelper擴展方法來爲每個狀態輸出正確的html。喜歡的東西:

@if(Model.state == "NEW") { 
Html.RenderActionEdit() 
Html.RenderActionDelete() 
} 

而要做到這一點,我在做簡單的方法,形式:

return MvcHtmlString.Create("<form><input>..... </form>"); 

但是,這是HTML的大位相當麻煩。所以,問題是,是否可以在單獨的視圖(cshtml文件)上編寫這個Html,然後以某種方式加載它們並將結果傳遞給MvcHtmlString?像

return MvcHtmlString.Create(View.Load("EditAction.csthml")); 

我找不到一種方法來加載現有的視圖,然後只是「包括」在部分方法的輸出。

非常感謝您的幫助!

回答

2

有幾個方法可以做到這一點:

  1. @Html.RenderPartial("thepartial.cshtml", model);將通過model的局部視圖,並呈現它。還有一些其他版本。

  2. @Html.Action("action", "controller", id) (see msdn)會將id傳遞給指定的操作方法,並呈現它輸出的視圖。如果您的主視圖中沒有可用的部分模型對象,這非常方便。

在上的HtmlHelper擴展方法,你可以使用它像這樣:

public HtmlString YourContent(this HtmlHelper helper) 
{ 
    return helper.Action("action", "controller", new { id = 1 }); 
} 

這在你看來會通過調用@Html.YourContent()使用。

+0

嗯,我明白了,但是我不能從擴展方法調用Html.RenderPartial,因爲它是一個實例方法。我知道我可以直接從視圖中調用它們,但我想從擴展方法中嘗試它! – tggm 2011-03-28 01:05:49

+0

@Tiago:嗯,你正在擴展HtmlHelper,對吧? – 2011-03-28 20:56:30

+0

對不起,我不是很清楚。我將其標記爲已回答。我的問題是,我正在HtmlHelper之外編寫這些幫助器方法(即常規方法不是擴展方法)。正如你所指出的,我意識到這隻能作爲HtmlHelper的擴展。 – tggm 2011-03-29 01:37:22

相關問題