我在向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格式”。没有显示。它会验证您是否正确输入日期。
答案 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)
您提供的示例适用于我的测试项目。你能尝试在新创建的项目中重现错误吗?