2014-02-07 55 views
2

我有3个共享一个部分(其中包含模型数据(@ Html.TextBoxFor))的屏幕。什么是实现这个屏幕的最佳方式?MVC 4重用视图和查看模型最佳实践

我尝试什么:

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

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

+0

对于#1(如果我理解正确),所有3个模型都实现了相同的界面,以便您*可以*将每个模型传递给相同的局部视图。 'IHaveClientData'。该视图然后可以期待'IHaveClientData'的一个实例。 –

+0

我会尽力谢谢。 –

回答

1

如果您想将它们放置在一个表单中并一起提交,则通常不是最佳选择。在这种情况下,最好利用EditorTemplates这将解决您的问题。

首先,您必须将部分拖到文件夹~/Shared/EditorTemplates/并将其重命名为与型号名称相匹配。

然后你可以打电话给他们在你看来是这样的:

Html.EditorFor(model => model.ClientData) 

由于这是你的HTML代码(name属性要准确)会以这样的方式您的默认模型绑定将生成能够绑定你的观点的这部分。

+0

谢谢,我会用它。 –