代码之家  ›  专栏  ›  技术社区  ›  Graham Conzett

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

  •  0
  • Graham Conzett  · 技术社区  · 15 年前

    我在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 回复  |  直到 15 年前
        1
  •  3
  •   cfeduke    15 年前

    我认为这里的问题是,您正在根据正则表达式测试实际的日期时间类型。因为它们在文本框中输入了无效的日期时间格式,所以从未将其实际分析为可以对其调用ToShortDateString()的实际日期时间。因此,实际上从未进行过正则表达式验证。

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

        2
  •  0
  •   Josh E    15 年前

    我想您需要包含一个验证摘要来获取消息

    <%= Html.ValidationSummary() %>
    

    编辑:尝试在addModelError调用中使用“.”而不是“u”作为属性名,如下所示:

    而不是:

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

    试试这个:

    ModelState.AddModelError("availability.StartDate", "Start date must be...");
    
        3
  •  0
  •   Mathias F    15 年前

    你给我的测试项目的样本。您是否可以尝试在新创建的项目中重现错误?