MVC 3 Razor-模型的部分验证

时间:2012-06-11 15:27:30

标签: asp.net-mvc-3 razor validation entity-framework-mapping

我目前正在研究MVC 3中的一个项目,我正在利用Entity Framework将一个数据模型保存在两个视图中,每个视图包含一个HTML表单(类似于基于向导的设计)。

然而,在用户填写第一个View上的相应字段并提交表单后,将触发整个模型的客户端验证,并显示甚至无法输入的字段的验证错误,直到第二个查看实例化。

我目前已经实现了一种解决方法,我只是完全关闭第一个View的客户端验证,但我当然不热衷于使用尚未验证的数据填充我的模型。这是不好的。 M'kay。

有没有办法部分验证第一个View上的字段而不触发整个数据模型的valdiation?

3 个答案:

答案 0 :(得分:0)

这就是ViewModels的来源。您应该在视图上创建视图模型并绑定到视图,而不是直接将域模型与视图绑定。

答案 1 :(得分:0)

如果您不需要直接在EF模型上进行验证,则可以根据需要使用MetadataType进行部分验证。看看我的长example here on stackoverflow

答案 2 :(得分:0)

感谢所有输入。但是,我能够以一种非常简单的方式获得解决方案。将以下代码放在第一个View的HttpPost元素中......

if (ModelState.IsValidField("FirstField") && ModelState.IsValidField("SecondField")) return RedirectToAction ("NameOfAction", model); else return View();

......我能够实现部分现场验证。但是,如果第一个View上的“提交”按钮具有“取消”类,并且在上述操作之前手动清除了生成的其他验证错误(对于第一个视图中不存在的字段),则此特定于字段的方法将起作用。如果声明。为此,请使用:

ModelState["FieldName"].Errors.Clear();

架构没有重大变化。没有部分观点。没有处理未经验证的数据。

效果很好......

注意:如果第二个View加载验证错误,请使用:

ModelState.Clear();

在最初调用第二个View的Action中的

。这将使第二个View加载清除且无错误,同时在最终表单提交后仍显示验证错误。