2015-02-07 38 views
2

我想編輯DinnerViewModel(以下)作爲一個單元。有沒有一種乾淨的方式來編輯viewmodels及其各個組件模型?

我還想單獨編輯組件型號DrinkMainCourseDessert

我想爲兩者使用相同的剃鬚刀視圖。

public class DinnerViewModel 
{ 
    public Drink Drink {get;set;} 
    public MainCourse MainCourse {get;set;} 
    public Dessert Dessert {get;set;} 
} 

顯示字段修改

這似乎是確定的工作:

@model EditDinnerViewModel 

@{Html.RenderPartial("_DrinkEditingFields", Model.Drink);} 
@{Html.RenderPartial("_MainCourseEditingFields", Model.MainCourse);} 
@{Html.RenderPartial("_DessertEditingFields", Model.Dessert);} 

發佈至控制器

這是我在遇到麻煩。我想這樣做:

public ActionResult CreateDinner(DinnerViewModel dinner) 

但是,因爲我已經呈現每個viewmodel組件作爲部分,它不會正確綁定。 (例如,字段名稱只是VegMeat而不是MainCourse_VegMainCourse_Meat)。

我希望我能得到它的工作是這樣的:

public ActionResult CreateDinner(Drink drink, MainCourse mainCourse, Dessert dessert) 

但可以肯定,這是不好的設計(例如,如果2個車型共享相同的字段名稱,我會很麻煩)。

我認爲這可能是一個共同的要求。有經驗的開發人員如何處理這個問題

+0

使用編輯器模板而不是部分視圖。 – dom 2015-02-07 19:01:05

+0

太簡單了!我曾以爲他們只是單一的屬性,我沒有意識到你可以使用他們的整個模型。感謝Dom。如果你把它放到答案中,我會將它標記爲 – 2015-02-07 20:02:35

+0

你也可以使用['UIHintAttribute'](https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.uihintattribute%28v = vs.110%29.aspx)來聲明性地影響你的模型應該用於屬性的編輯器模板。 – HackedByChinese 2015-02-07 22:24:57

回答

0

@Dom的答案絕對正確「使用編輯器模板而不是部分視圖」。 另外,如果您(出於某種原因)想爲您的組件使用特定前綴,請使用:

@{ 
    ViewData.TemplateInfo.HtmlFieldPrefix = "Prefix"; 
} 
相關問題