asp.NET MVC模型状态验证问题

时间:2009-07-16 19:04:46

标签: asp.net asp.net-mvc validation

我在向MVC应用中的几个控件添加验证方法时遇到问题。我使用以下方法测试mm / dd / yyyy格式:

if (!Regex.IsMatch(candidateToEdit.availability.StartDate.ToShortDateString(), @"giantregex"))
            ModelState.AddModelError("availability_StartDate", "Start date must be in the mm/dd/yyyy format.");
//giantregex is a giant regular expression omitted for clarity

在我看来,我有:

<%= Html.ValidationSummary("Edit was unsuccessful. Please correct the errors and try again.") %>

<%= Html.ValidationMessage("availability_StartDate", "*")%>

无论出于何种原因,错误文本未显示,它都会确认存在错误并生成列表的开头,但“开始日期必须为mm / dd / yyyy格式”。没有显示。它会验证您是否正确输入日期。

3 个答案:

答案 0 :(得分:3)

我认为这里的问题是你正在测试一个正则表达式的实际DateTime类型。因为它们在文本框中输入了无效的日期时间格式,所以它实际上从未被解析为可以在其上调用ToShortDateString()的实际DateTime。因此,您的正则表达式验证永远不会发生。

您需要采用ViewModel模式,首先将所有潜在的解析问题公开为字符串(例如“candidateToEditViewModel.AvailabilityStartDateString”),或者实施客户端验证和防御程序。

答案 1 :(得分:0)

我认为您需要包含验证摘要以获取消息

<%= Html.ValidationSummary() %>
编辑:尝试输入“。”而不是“_”作为AddModelError调用中的属性名称,如下所示:

而不是:

ModelState.AddModelError("availability_StartDate", "Start date must be...");

试试这个:

ModelState.AddModelError("availability.StartDate", "Start date must be...");

答案 2 :(得分:0)

您提供的示例适用于我的测试项目。你能尝试在新创建的项目中重现错误吗?