2011-06-05 16 views
0

在我的觀點中,我使用模型的泛型類型ItemModel<T>ModelBinding MVC3中的泛型類型

這允許我在我的模型上有一個基類,它工作正常。在ItemModel<T>內,我將T的實際實體附加到名爲「Item」的屬性。

比方說,我加載用戶資料:在我看來,我願做這樣的事情:

<%: Html.TextBoxFor(Model => Model.Item.NickName, 
new { id="NickName", name="NickName" })%> 

因爲實體通過項目屬性增加,這會產生輸入標籤的name屬性作爲'Item.NickName'。發帖時,MVC再也不能在我的控制器

public ActionResult Login(User user, string redirectUrl) 

涉及該用戶對象的User.NickName財產,因此沒有被加載到我的用戶對象。有沒有辦法來解決這個問題?我一直在研究編寫一個自定義綁定模型或值提供程序,但這看起來像很多工作這樣簡單的事情。另外,我真的不確定那是怎麼回事。

所有幫助非常感謝!

回答

0

變化的方法從

public ActionResult Login(User user, string redirectUrl) 

public ActionResult Login(User Item, string redirectUrl) 

這樣modelbiner就能找到用戶對象的屬性前綴爲項目

+0

這實際上有用嗎?!如果調用實例Item,它將「Item.Key」(通常只是「Key」)映射到object.key。這是一個記錄的功能? – Syg 2011-06-05 15:04:58

+0

不確定有關文檔,但瞭解它很難(通過經驗:) – 2011-06-05 15:14:33

0

,您可以創建的helper方法來創建文本框您的ActionResult的

public static MVCString MyTextBox<T>(this HtmlHelper html,T _item,String PropertyName) 
{ 
    TagBuilder myTag = new TagBuilder("input"); 
    myTag.Attributes("type")="Text"; 
    myTag.Attributes("id")=PropertyName; 
    myTag.Attributes("name")=PropertyName; 
    myTag.Attributes("value")=typeof(_item).GetProperty(PropertyName).GetValue(_item,null).toString(); 
    Return MvcHtmlString.Create(selectTag.ToString()) 
} 
+0

我想這會工作,但這是很多手動工作。我所有的觀點都使用這個構造,所以我將不得不爲每一列創建助手。我真正想做的就是自動將Map Item.Anything映射到任何東西。 – Syg 2011-06-05 14:44:33

+0

我更新了我的代碼,使用.Net反射更通用。我希望能幫助你。 – 2011-06-05 14:56:48