gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:49:11 24 4
gpt4 key购买 nike

我为此 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)到不可为空的模型属性时,错误被标记了。您可能想要清除该特定属性的任何错误的 ModelState,然后添加您自己的模型验证错误。如果 ModelState 包含同一属性的多个错误,您可能只会得到第一个匹配的错误。

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com