0

我目前正在 MVC 3 中的一个项目中工作,我正在利用实体框架将一个数据模型保存在两个视图上,每个视图都包含一个 HTML 表单(类似于基于向导的设计)。

然而,在用户在第一个 View 上填写适当的字段并提交表单后,整个模型的客户端验证被触发,并且在第二个 View 实例化之前甚至无法输入的字段显示验证错误。

我目前已经实现了一种解决方法,我只是完全关闭了第一个视图的客户端验证,但我当然不热衷于用根本没有经过验证的数据填充我的模型的想法。这是不好的。好吧。

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

4

3 回答 3

0

感谢大家的输入。但是,我能够以非常简单的方式获得解决方案。通过将以下代码放在第一个视图的 HttpPost 元素中...

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

...我能够实现部分现场验证。但是,这种特定于字段的方法仅适用于第一个视图上的提交按钮具有“取消”类并且生成的附加验证错误(对于第一个视图上不存在的字段)在上述操作之前手动清除if 语句。为此,请使用:

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

架构没有重大变化。没有部分意见。不移交未经验证的数据。

效果很好...

注意:如果第二个视图加载时出现验证错误,请使用:

ModelState.Clear();

在最初调用第二个视图的操作中。这将使第二个视图加载干净且无错误,同时在最终表单提交后仍显示验证错误。

于 2012-06-12T14:42:20.943 回答
0

这就是 ViewModel 的用武之地。您应该在它们之上创建视图模型并绑定到视图,而不是直接将域模型与视图绑定。

于 2012-06-11T15:36:32.717 回答
0

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

于 2012-06-11T16:03:15.520 回答