【发布时间】:2014-02-07 15:54:15
【问题描述】:
我有 3 个屏幕共享一个部分(其中包含模型数据(@Html.TextBoxFor))。实现此屏幕的最佳方式是什么?
我尝试了什么:
1) 公共部分(_ClientData)的部分视图。不同屏幕的 3 个视图。 3个具有共同属性(ClientData)的视图模型,即部分视图模型。
问题:如果我将模型作为@{Html.RenderPartial("_ClientData", Model.ClientData);} 传递给部分,则部分中的数据不会提交给模型。
如果我将模型作为 @{Html.RenderPartial("_ClientData", Model);} 传递给局部视图并使用填充名称引用属性,则提交数据,但我无法将不同类型的模型传递给局部视图。
2) 使用一个大视图模型,其中包含 3 个屏幕所需的所有数据,一个视图并根据某些标志显示/隐藏一些元素。 问题:我无法使用 ValidationAttributes(例如,如果屏幕 1 中需要一个字段,但屏幕 2 中未显示该字段且其值为 null,则将触发验证)。我可以在控制器中使用一些手动验证,但使用多合一视图和视图模型的整个过程听起来很糟糕。
【问题讨论】:
-
对于#1(如果我理解正确的话),让所有 3 个模型实现相同的接口,以便您可以将它们中的每一个传递到相同的局部视图,例如
IHaveClientData。然后视图可以期待IHaveClientData的实例。 -
我会试试的,谢谢。
标签: c# asp.net-mvc asp.net-mvc-4