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 ,我逐步浏览了应用程序以查看其他验证错误发生在哪里。不幸的是,我没有找到任何线索……至少对我来说很明显。这是我的监 window 口的屏幕截图:

alt text

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

任何其他建议将不胜感激!谢谢!

最佳答案

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

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

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

相关文章:

c# - 模型未传递给渲染 View

c# - 将带有数组的 json 结构展平为多个没有数组的平面对象

c# - 何时编辑数据应将数据的 id 存储在 session 中

jquery - 只允许在 MVC 中单击一次按钮

java - 在 POST 请求上验证表单时遇到问题(Spring Boot)

jquery - 复选框验证(例如我同意条款和条件jquery)

c# - 从数据库中的一系列 Kw 读数(当时的 kw 值)确定每日 Kwh 值的正确方法是什么

c# - WPF 如何管理文本框上的 ENTER 命中以进行消息传递

c# - Asp Web Api 异步操作 - 404 错误

java - 依赖域约束进行验证是一种好习惯吗