我有一个单一视图模型的设置,用于多个表单,我的验证导致了我的问题。
问题1 我可以使用单一视图模型并仅验证表单中使用的字段吗?
我有一个视图模型
public class KundeOrdreVM : IPanelVM
{
public string PhoneNumber { get; set; }
public string ItemEAN{ get; set; }
}
在我的视图中,我有两种形式(此示例代码简化)
<form action="/CreatePhone" method="post" novalidate="novalidate">
@Html.EditorFor(model => model.PhoneNumber)
<input type="submit" value="Create Phone">
</form>
表格2:
<form action="/CreateItem" method="post" novalidate="novalidate">
@Html.EditorFor(model => model.ItemEAN)
<input type="submit" value="Create Item">
</form>
每个表单使用共享ViewModel中的单个字段。
我的问题是我想要两个字段[必填],但仅当用户发布使用该字段的表单时。
有没有办法让这个工作,同时重用相同的ViewModel?
问题2 如果我必须使用多个ViewModel作为每个表单的输入,是否有一个很好的设计实践指南,我可以在一个视图中使用多个ViewModel?
我不喜欢为我页面上的每个表单制作大量的@ Html.RenderPartial。表格密切相关。
答案 0 :(得分:1)
如果您需要具有不同要求的表单,则需要分离ViewModel。通常,ViewModels与视图的关系为1:1,而1:n关系非常罕见。
这样做的一个原因是,您的两个观点中的一个可能会在将来获得需求变更。如果要将此新字段添加到ViewModel,这也会影响使用相同ViewModel的其他视图。
最初这可能看起来更多,但稍后在需求发生变化时更容易应用更改。
只有当ViewModel执行完全相同的操作时才重复使用ViewModel,并且当一个更改的需求必须反映到所有其他视图时,例如LoginViewModel
,其中您有不同的登录视图,例如导航栏,在用户登录时随处可见,以及在尝试访问受保护页面时显示用户重定向到的页面。