MVC,查看模型和[必需]

时间:2016-02-02 10:15:18

标签: forms validation mvvm asp.net-mvc-5

我有一个单一视图模型的设置,用于多个表单,我的验证导致了我的问题。

问题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。表格密切相关。

1 个答案:

答案 0 :(得分:1)

如果您需要具有不同要求的表单,则需要分离ViewModel。通常,ViewModels与视图的关系为1:1,而1:n关系非常罕见。

这样做的一个原因是,您的两个观点中的一个可能会在将来获得需求变更。如果要将此新字段添加到ViewModel,这也会影响使用相同ViewModel的其他视图。

最初这可能看起来更多,但稍后在需求发生变化时更容易应用更改。

只有当ViewModel执行完全相同的操作时才重复使用ViewModel,并且当一个更改的需求必须反映到所有其他视图时,例如LoginViewModel,其中您有不同的登录视图,例如导航栏,在用户登录时随处可见,以及在尝试访问受保护页面时显示用户重定向到的页面。