0

我已经搜索并用谷歌搜索了这个问题的答案,但无济于事。我正在使用 EF4 和 ASP.NET MVC2,并且我有一个带有不可为空字符串字段“RecipientID”的 EF4 实体“Award”。我正在使用 DataAnnotations 进行服务器端验证,因此在我的“Award”部分类中,我将 RecipientID 设置为具有 Required 属性。当我尝试在 RecipientID 文本框为空的情况下提交表单时,我在 Html.ValidationSummary 中看到我的错误消息“请输入收件人”两次。

这是否是因为实体(因为它是具有空值的不可空字段)以及应用程序都抛出了错误?不管是什么原因,有没有办法“解决”这个问题并且只显示一次错误消息?(修复引用,因为我不确定这是否是预期的行为。)我认为没有必要包含相关代码,但如果需要,我会这样做。

预先感谢您的帮助。

4

2 回答 2

2

根据布拉德威尔逊的说法,这看起来像是有意为之。我应该搜索“ConstraintException”和 EF4。:)

根据 Brad 的说法,在绑定模型之前会触发输入验证,从而引发“必需”错误。此外,这些字段不可为空,这意味着它们在模型绑定期间会抛出相同的“必需”。在我看来,它会显示在“必需”属性中指定的相同消息,而不是 SQL 异常消息,这有点令人困惑,因为它看起来像是相同的错误。它肯定不是。这就是 ConstraintException 出现的地方。为了防止重复消息,只需像这样包装模型绑定代码:

if (ModelState.IsValid) {
    ValidateModel(award);
    repository.Add(award);
    repository.Save();
}

就那么简单。谢谢!

于 2010-12-01T15:52:43.537 回答
0

我发现使用 ModelState.Clear(); 在遇到类似问题时工作。

于 2013-11-15T16:50:33.597 回答