Asp.net mvc 3 要求的字段验证MVC

Asp.net mvc 3 要求的字段验证MVC,asp.net-mvc-3,Asp.net Mvc 3,我有这种情况 我有一张表格a和表格B。这两种形式都使用一个模型。模型中有10个字段,所有字段都是必填字段 表格A使用模型的前5个(1,2,3,4,5)字段,表格B使用剩余的(6,7,8,9,10)字段 因此,当我提交表格A时,它要求我填写所需字段(6,7,8,9,10),与表格B的情况相同,它要求我提供(1,2,3,4,5)字段。我如何确保只有那些在表单上可用的字段才被认为是必需的。我可以想出两种方法来满足您的需要: 使用所有字段创建两个模型,但仅在每个表单中需要的字段上使用RequiredAt

我有这种情况

我有一张
表格a
表格B
。这两种形式都使用一个模型。模型中有10个字段,所有字段都是必填字段

表格A使用模型的前5个
(1,2,3,4,5)
字段,表格B使用剩余的
(6,7,8,9,10)
字段


因此,当我提交
表格A
时,它要求我填写所需字段
(6,7,8,9,10)
,与
表格B的情况相同,它要求我提供
(1,2,3,4,5)
字段。我如何确保只有那些在表单上可用的字段才被认为是必需的。

我可以想出两种方法来满足您的需要:

  • 使用所有字段创建两个模型,但仅在每个表单中需要的字段上使用RequiredAttribute。所有字段,以便您可以毫无问题地相互映射

  • 不要使用RequiredAttribute,而是尝试使用RemoteValidationAttribute,并根据调用的表单检查是否应该抛出所需的错误


  • 另一个选项是禁用客户端验证,只执行服务器端验证。我的意思是,无论如何,在持久化模型之前,您应该始终执行服务器端(检查业务规则)验证。

    这可以通过使用视图模型实现,这样您的视图将与相关视图模型交互,然后视图模型将与模型交互。请记住,视图模型只包含特定于模型的字段。下面是一些步骤

    1) 使用字段(1,2,3,4,5)创建两个视图模型A,使用字段(6,7,8,9,10)创建两个视图模型B

    2) 视图将相关字段提交到视图模型,然后您可以通过两种方式提交到模型

    a) 提交视图时,插入前五个值,然后插入五个字段 虚拟值或默认值。提交视图B后,更新此记录的最后一个 五个值与实际值

    b) 制作另一个包含所有十个字段的ViewModelAB(不带必需属性),制作此ViewModelAB的对象,并在提交两个视图模型(即A和b)时填充它。填写完所有字段后,将其提交给实际的数据库模型

    请询问您是否需要进一步帮助