ASP.NET MVC4 - 基于由多个表单的entityFramework生成的模型进行验证

时间:2014-08-08 10:00:36

标签: entity-framework asp.net-mvc-4

在我的第一个asp.net mvc4项目中,我试图在我的四个表单中对同一页面应用一些验证测试。每个表单允许我在我的表中创建一个不同类型的项目(dataBase) ,所以我使用了由实体框架生成的相同模型,并且为了验证我使用了与我生成的模型同名的部分类,并且我插入了数据注释,例如错误消息所需。我的问题是当我提交一个表格,将所需的字段留空时,会显示所有表格的相应验证错误消息,而不仅仅是我提交的表格。请有人告诉我如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

如果您在(例如)属性RequiredAttribute上有Name并且在回发时为null,则会为该属性添加验证错误。如果您检查为表单生成的html,您将看到类似的内容(假设您使用@Html.ValidationMessageFor(m => m.Name))充当与Name

关联的任何验证错误消息的占位符
<span class="field-validation-valid" data-valmsg-for="Name" data-valmsg-replace="true"></span>

请注意..data-valmsg-for="Name"..。由于您使用相同的模型渲染4个相同的表单,为属性Name生成4个输入,因此将有4个相应的验证错误。

您渲染4种相同形式的方法没有意义,因为您只能发回一个。我建议您考虑使用包含ProjectType属性的视图模型并渲染DropDownList,以便用户可以选择项目类型。然后只需要一个表单,在提交时,获取所选的ProjectType并使用它来做出保存数据所需的任何决定。

答案 1 :(得分:0)

只需以这种方式构建您的视图: -

@using (Html.BeginForm("ActionName", "ControllerName", FormMethod.Post, new { @Id = "Form1" }))
{
  ..........
  ..........
  <button type="submit">Update this stuff</button>
}

@using (Html.BeginForm("ActionName", "ControllerName", FormMethod.Post, new { @Id = "Form2" }))
{
  ..........
  ..........
  <button type="submit">Update this stuff</button>
}

在上面的例子中提交&#34; Form1&#34;与&#34; Form1&#34;相关的模型验证;将触发和#34; Form2&#34;。

的相同案例