C# 为什么我的验证消息是通用的?ASP.NETMVC
我为这个ASP.NET MVC应用程序编写了一个自定义验证处理程序。以下是验证消息的屏幕截图: 正如你所看到的,头衔和导演工作得很好,但日期却不行。创建视图的代码:C# 为什么我的验证消息是通用的?ASP.NETMVC,c#,asp.net-mvc,validation,C#,Asp.net Mvc,Validation,我为这个ASP.NET MVC应用程序编写了一个自定义验证处理程序。以下是验证消息的屏幕截图: 正如你所看到的,头衔和导演工作得很好,但日期却不行。创建视图的代码: <fieldset> <legend>Fields</legend> <p> <%= Html.Label("Title", "Title:") %> <%= Html.TextBox("Title") %>
<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>
我假设验证字典的键值需要与为字段提供的值(本例中为ReleaseDate)对应,但我似乎没有这样做。我还尝试在单词之间添加一个空格,以防它按显示名称查找,但也没有运气
有人能帮我解决这个问题吗
编辑
接下来,我通过应用程序查看另一个验证错误发生的位置。不幸的是,我没有发现任何线索……至少对我来说是显而易见的。这是我的手表窗口的屏幕截图:
正如所料,其中有三个键:标题、目录和发布日期。没有第四个(列表中的第三个?参见第一个屏幕截图)验证失败的迹象
如有任何其他建议,将不胜感激!谢谢 我敢说你有两个问题
我怀疑问题在于,当模型绑定器尝试将null值绑定到不可为null的模型属性时,错误被标记。您可能希望清除ModelState中该特定属性上的任何错误,然后添加您自己的模型验证错误。如果ModelState包含同一属性的多个错误,则可能只会得到第一个匹配的错误
您还可以使ReleaseDate属性为空(DateTime?),然后只需检查是否提供了日期。如果可能的话,这可能是最简单的更改,但如果模型是从数据库派生的,并且字段不可为空,则必须引入视图模型来完成此更改。OK,因此在#1中建议的更改中添加了发布日期错误消息,但我仍然有通用错误消息。我将按照您的建议检查调试并发回。@Anders--听起来答案很有帮助,所以我很惊讶没有看到对此答案进行投票。@tvan--soz,在代码之间来回运行。我总是进行投票,只是全神贯注于atm:)完成整个过程(从单击“创建”按钮开始),我看到ModelState只有3个键。您建议在哪里查找此可为null的模型属性或诸如此类的内容?我不确定它在哪里,不幸的是,我面前没有要检查的MVC构建,但您可以在调试到它时通过控制器操作来获取它。我认为它是在你的模型状态下,但是你可能必须打开你的钥匙,看看里面有什么。根据我的经验,这就是为什么你大部分时间都会出现这种错误。因为它试图将null值绑定到不可为null的属性。FKs只是可能发生的一种方式。
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;
}