是否有一种干燥的方式来编辑视图模型及其各个组件模型?

时间:2015-02-07 18:30:57

标签: asp.net-mvc viewmodel dry

我想将DinnerViewModel(下方)编辑为一个单元。

我还想单独编辑组件模型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个模型共享相同的字段名称,我就会遇到麻烦)。

我认为这可能是一个常见的要求。经验丰富的开发人员如何处理这个问题?

1 个答案:

答案 0 :(得分:0)

@Dom的答案绝对正确“使用编辑器模板而不是部分视图”。 此外,如果您(出于某些原因)想要为您的组件使用特定前缀,请使用:

@{
    ViewData.TemplateInfo.HtmlFieldPrefix = "Prefix";
}