c# - 为什么我的验证消息是通用的? ASP.NET MVC

标签 c# asp.net-mvc validation

我为此 ASP.NET MVC 应用程序编写了一个自定义验证处理程序。以下是验证消息的屏幕截图:

alt text

如您所见,标题和导演很好,但日期不行。我用于创建 View 的代码:

<fieldset>
    <legend>Fields</legend>
    <p>
        <%= Html.Label("Title", "Title:") %>
        <%= Html.TextBox("Title") %>
        <%= Html.ValidationMessage("Title", "*") %>
    </p>
    <p>
        <%= Html.Label("Director", "Director:")%>
        <%= Html.TextBox("Director") %>
        <%= Html.ValidationMessage("Director", "*") %>
    </p>
    <p>
        <%= Html.Label("ReleaseDate", "Release Date:")%>
        <%= Html.TextBox("ReleaseDate") %>
        <%= Html.ValidationMessage("ReleaseDate", "*") %>
    </p>
    <p>
        <%= Html.Submit("Create") %>
    </p>
</fieldset>

这是处理验证逻辑的代码:

public bool ValidateMovie(Movie movieToValidate)
{
    if (movieToValidate.Title.Trim().Length == 0)
        _validationDictionary.AddError("Title", "Title is required.");

    if (movieToValidate.Director.Trim().Length == 0)
        _validationDictionary.AddError("Director", "Director is required.");

    if (movieToValidate.ReleaseDate.ToString().Trim().Length == 0)
        _validationDictionary.AddError("ReleaseDate", "Release Date is required.");

    return _validationDictionary.IsValid;
}

我假设验证字典的键值需要与为字段提供的值(本例中为ReleaseDate)相对应,但这对我来说似乎没有发生。我还尝试在单词之间添加一个空格,以防它通过显示名称查找它,但也没有运气。

谁能帮我解决这个问题吗?

编辑

已关注 Joseph's suggestion ,我单步执行应用程序以查看其他验证错误发生的位置。不幸的是,我没有发现任何线索……至少对我来说是显而易见的。这是我的 watch 窗口的屏幕截图:

alt text

正如预期的那样,其中包含三个键:标题、目录和发布日期。没有第四个(列表中的第三个?参见第一个屏幕截图)验证失败的迹象。

如有任何其他建议,我们将不胜感激!谢谢!

最佳答案

我怀疑问题是当模型绑定(bind)器尝试将空值绑定(bind)到不可为空的模型属性时,错误被标记。您可能想要清除该特定属性上的任何错误的 ModelState,然后添加您自己的模型验证错误。如果 ModelState 包含同一属性的多个错误,您可能只会得到第一个匹配的错误。

您还可以将 ReleaseDate 属性设为可为空(DateTime?),然后只需检查是否已提供日期。如果可能的话,这可能是最简单的更改,但如果模型派生自数据库并且该字段不可为空,则您必须引入 View 模型来完成它。

关于c# - 为什么我的验证消息是通用的? ASP.NET MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1312648/

相关文章:

c# - 异步请求如何用于服务器端验证

c# - ASP.NET 的调试工具栏

css - 如何更改 HTML5 表单验证消息中的图像?

c# - 正则表达式 n 0 然后是 1

c# - 将 chromedriver.exe 放在哪里以发布 Selenium WebDriver C#

c# - 立即窗口中的动态导致 'Microsoft.CSharp.RuntimeBinder.Binder' is not defined or imported 错误

c# - EntityObject 到 DbContext

javascript - 获取从 MVC 中的表中单击的行的 Id

jquery - 验证小数

jquery - 未捕获的范围错误: Invalid language tag on Chrome