加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 03:41:23 所属栏目:asp.Net 来源:网络整理
导读:我的ViewModel中有一个DateTime MyDate类型的属性.我想确保用户只在特定格式(dd.mm.yyyy)的文本框中输入Date部分,并尝试以下属性: [DisplayFormat(DataFormatString = "{0:d}",ApplyFormatInEditMode=true)][RegularExpression(@"^(([0-2]d|[3][0-1]).([0
我的ViewModel中有一个DateTime MyDate类型的属性.我想确保用户只在特定格式(dd.mm.yyyy)的文本框中输入Date部分,并尝试以下属性:

[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的控制器操作签名如下所示:

[HttpPost]
public ActionResult Edit(int id,MyViewModel viewModel)
{
    // MyViewModel contains the MyDate property ...
    // ...
    if (ModelState.IsValid)
    {
        // ...
    }
    // ...
}

在Razor视图中,我尝试了以下两种方式:

> @ Html.TextBoxFor(model => model.MyDate)
> @ Html.EditorFor(model => model.MyDate)

它不能按我的意愿工作.结果是:

>客户端验证与两个Html帮助程序一样正常工作
>对于两个帮助程序,服务器端验证总是失败,即使是通过正则表达式的有效日期(如“17.06.2011”)也是如此.使用viewModel中输入的日期正确填充MyDate属性,该日期将传递给操作.所以似乎模型绑定工作正常.
> DisplayFormat属性仅受EditorFor尊重,但不受TextBoxFor的尊重. TextBoxFor显示“dd.mm.yyyy hh:mm:ss”

问题:

>我可以在不是字符串的属性上应用RegularExpressionAttribute吗?如果允许,如何在服务器端对Date字符串等非字符串属性评估reg ex?类似于MyDate.ToString()与reg ex相比? (它会解释验证失败,因为ToString将返回一个包含时间部分的字符串,该字符串不会传递正则表达式.)
> DisplayFormat属性通常只受EditorFor尊重,而不是TextBoxFor吗?
>我该如何进行日期验证呢?

解决方法

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

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

您可以使用web.config中的<globalization>元素来设置服务器端文化.您可以使用与客户端相同的文化来配置它:

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

Hanselman在ASP.NET MVC中有关于全球化和本地化的nice blog post.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读