gpt4 book ai didi

asp.net - 在 ASP.NET MVC 3 中以特定格式验证日期

转载 作者:行者123 更新时间:2023-12-04 16:48:59 24 4
gpt4 key购买 nike

我有一个 DateTime MyDate 类型的属性在我的 View 模型中。我想确保用户仅以特定格式(dd.mm.yyyy)在文本框中输入日期部分并尝试了以下属性:

[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode=true)]
[RegularExpression(@"^(([0-2]\d|[3][0-1])\.([0]\d|[1][0-2])\.[2][0]\d{2})$",
ErrorMessage="Failed...")]
public DateTime MyDate { get; set; }

HttpPost 的 Controller 操作签名如下所示:
[HttpPost]
public ActionResult Edit(int id, MyViewModel viewModel)
{
// MyViewModel contains the MyDate property ...
// ...
if (ModelState.IsValid)
{
// ...
}
// ...
}

在 Razor View 中,我尝试了以下两种方法:
  • @Html.TextBoxFor(model => model.MyDate)
  • @Html.EditorFor(model => model.MyDate)

  • 它不像我想要的那样工作。结果是:
  • 两个 Html 助手
  • 的客户端验证工作正常
  • 两个助手的服务器端验证总是失败,即使像“17.06.2011”这样的有效日期通过了正则表达式。 MyDateviewModel 中输入的日期正确填写属性它被传递给 Action 。所以看起来模型绑定(bind)正在工作。
  • DisplayFormat属性仅受 EditorFor 尊重但不是 TextBoxFor . TextBoxFor显示“dd.mm.yyyy hh:mm:ss”

  • 问题:
  • 我可以申请 RegularExpressionAttribute完全不是 string 的属性?如果允许,reg ex 如何评估非字符串属性,如 DateTime在服务器端?类似于 MyDate.ToString()与 reg ex 相比? (它会解释验证失败,因为 ToString 将返回一个包含不通过正则表达式的时间部分的字符串。)
  • DisplayFormat属性通常仅受 EditorFor 尊重并且从不通过 TextBoxFor ?
  • 我怎样才能正确地进行日期验证?
  • 最佳答案

    不要使用正则表达式来验证日期,它们会被忽略。

    文化差异可能是您问题的根源。客户端验证使用浏览器的文化来验证日期。例如,如果它被配置为 en-US预期格式为 MM/dd/yyyy .如果您的服务器配置为使用 fr-FR预期格式为 dd/MM/yyyy .

    您可以使用 <globalization> web.config 中用于设置服务器端文化的元素。您可以对其进行配置,使其使用与客户端相同的文化:

    <globalization culture="auto" uiCulture="auto"/>

    Hanselman 有一个 nice blog post关于 ASP.NET MVC 中的全局化和本地化。

    关于asp.net - 在 ASP.NET MVC 3 中以特定格式验证日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6388238/

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