我想将DinnerViewModel
(下方)编辑为一个单元。
我还想单独编辑组件模型Drink
,MainCourse
和Dessert
。
我想为两者使用相同的剃刀视图。
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组件渲染为部分视图,所以它不会正确绑定。 (例如,字段名称仅为Veg
和Meat
,而不是MainCourse_Veg
和MainCourse_Meat
。)
我希望我能让它像这样工作:
public ActionResult CreateDinner(Drink drink, MainCourse mainCourse, Dessert dessert)
但这肯定是糟糕的设计(例如,如果2个模型共享相同的字段名称,我就会遇到麻烦)。
我认为这可能是一个常见的要求。经验丰富的开发人员如何处理这个问题?
答案 0 :(得分:0)
@Dom的答案绝对正确“使用编辑器模板而不是部分视图”。 此外,如果您(出于某些原因)想要为您的组件使用特定前缀,请使用:
@{
ViewData.TemplateInfo.HtmlFieldPrefix = "Prefix";
}