MVC 4重用视图和查看模型的最佳实践

时间:2014-02-07 15:54:16

标签: c# asp.net-mvc asp.net-mvc-4

我有3个屏幕共享一个部分(其中包含模型数据(@ Html.TextBoxFor))。实现此屏幕的最佳方式是什么?

我尝试了什么:

1)公共部分的部分视图(_ClientData)。 3个不同屏幕的视图。 3视图具有公共属性的模型(ClientData),即局部视图模型。 问题:如果我将模型传递给部分为@{Html.RenderPartial("_ClientData", Model.ClientData);},则部分数据不会传递给模型。 如果我将模型传递给部分为@{Html.RenderPartial("_ClientData", Model);}并使用填充名称引用属性,则会提交数据,但我无法将具有不同类型的模型传递给局部视图。

2)使用一个大视图模型,其中包含3个屏幕所需的所有数据,一个视图,并根据某些标记显示/隐藏一些元素。 问题:我不能使用ValidationAttributes(例如,如果屏幕1中需要一个字段,但它未在屏幕2中显示且其值为null,则验证将触发)。我可以在控制器中使用一些手动验证,但是所有在一个视图和viewmodel中的整个事情听起来非常糟糕。

1 个答案:

答案 0 :(得分:1)

部分通常不是最佳选择,以防您想将它们放在一个表格中并一起提交。在这种情况下,最好利用EditorTemplates来解决您的问题。

首先,您必须将部分文件拖到文件夹~/Shared/EditorTemplates/并重命名它们以匹配模型名称。

然后你可以在你的视图中调用它们:

Html.EditorFor(model => model.ClientData)

由于这个原因,您的HTML代码(准确的name属性)将以这样一种方式生成,即您的默认模型绑定器也能够绑定视图的这一部分。