2013-06-24 175 views
1

我有幾個模型說:A1,A2 A3 & A4。動態創建視圖從模型+ MVC4

會有意見的每個模型(如列表或創建,編輯等。)

但是我的觀點不應該有任何靜態HTML,我已經通過使用一些呈現HTML Html幫助器方法。

也許我應該寫在RenderHelper.cs的方法如下面

public static MvcHtmlString RenderContent(this HtmlHelper helper, IEnumerable<FatRoute> model) 
    { 
    } 

也,我要檢查列的類型在模型中呈現的文本框或根據其類型下拉或日期時間。

這裏的問題是,列是差異foreach模型(顯然),我不能有差異代碼塊來檢查每個模型的列類型。 如果我說物品。 (在這裏我得到了項目中的列)在foreach bolck中,我只獲得了傳遞模型的列。但它應該是處理所有模型的通用方法。

有人可以建議如何做到這一點?

回答

2

MVC已經提供了一種方法來做到這一點,或多或少。他們被稱爲顯示/編輯器模板。他們已經使用反射來動態呈現模型。如果你不喜歡默認的方式,你可以簡單地用你自己的自定義對象模板替換它。

你可以簡單地通過使用@Html.EditorForModel@Html.DisplayForModel使整個模型

您可以瞭解如何在這裏工作:

http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-3-default-templates.html

+0

感謝您的信息。我正在閱讀文章。只有一個想法,它是mVC 2中的特性。但是現在我們使用MVC4,有沒有更好的方法在MVC4中做到這一點,以及使用默認模板有哪些優缺點? – mmssaann

+0

@mmssddff - MVC3和MVC4基本上是MVC2的超集(有一些變化,但大體上是一個超集)。這並沒有改變。沒有優點和缺點,要麼你喜歡模板呈現的方式,要麼你不喜歡,如果你不喜歡,你會用你自己的。您可以從文章中的鏈接下載默認模板,並對其進行修改以滿足您的需求。 –

+0

@mmssddff - 嗯..似乎不再是一個鏈接..但默認模板是在MVCFutures源,你可以在這裏找到http://aspnetwebstack.codeplex.com/SourceControl/latest#src/Microsoft .Web.Mvc/FuturesFiles/DefaultTemplates/EditorTemplates/Object.ascx –

0

由於您已決定使用自定義幫助程序,因此一種方法是使用反射來遍歷模型的屬性並使用該知識來構建視圖。

這樣,您可以在模型的屬性上使用諸如DisplayNameAttribute之類的屬性註釋(數據註釋)等功能來向視圖生成器提供附加數據。

使用這種方法,您將針對在模型上定義的每種類型的屬性(列),而不是模型本身。