【发布时间】:2014-08-29 06:51:04
【问题描述】:
我有一个视图来创建一个对象,这个对象可以是三种类型。所以我决定创建一个带有 3 个选项卡的选项卡面板,每个选项卡代表这个对象的一种类型。
用户必须选择他们将填写数据的选项卡并按提交。顺便说一句,每个选项卡都有一个 FORM 和一个提交。
到目前为止,1 个视图和 3 个表单。
我想知道是否有更好的方法来做到这一点。使用渲染动作,partials,只有一个 viewmodel,很多 viewmodel。
我的最后一次尝试是使用具有所有可能性的大视图模型,并填充了一个用于确定类型/选项卡面板的隐藏字段。当用户提交时,我只得到该对象类型将使用并保存在数据库中的字段。
Pro:只有一个视图模型,只有一个控制器。如果模型状态有错误,我可以毫不费力地在视图中显示结果(使用 html validationmessagefor)。 Razor 绑定和 Razor 助手。 缺点:我不能在所有字段中使用数据注释,因为某些字段需要一个类型而不是另一个类型,并且它们具有相同的名称。如果一个表单的字段发生变化,另一个选项卡/表单中的同名字段也会发生变化。该对象有一些属性必须根据类型选择进行更改,但其他属性是相同的。那些显示更改了他的值,并且为每个表单显示了验证消息。 这是最好的方法
编辑
我正在考虑创建一个视图模型作为 3 个视图模型的容器。所以字段将被分开,对于每个“提交”,我将使用三个视图模型之一。
这是个好方法吗?
【问题讨论】:
-
MVC 使用策略模式,你可以很好地利用它(参考:codeproject.com/Articles/42830/…)你的视图上有多个表单没有问题,如果你可以为每个表单指定不同的控制器适合您的架构。
-
是的,这是一个很好的方法。确保您提供正确的命名,并且您必须了解模型绑定才能使用它
标签: c# asp.net-mvc razor asp.net-mvc-5 viewmodel