asp.net-mvc – MVC3自定义格式化日期的不显眼日期验证

我有一个日期字段(我使用 jquery ui datepicker)在我格式化的表单中,如下所示:

视图模型

[DisplayFormat(DataFormatString = "{0:dd-MMM-yyyy}",ApplyFormatInEditMode = true)]
public DateTime FooDate { get; set; }

视图

@Html.EditorFor(m => m.FooDate)

这正确地显示了我想要它的日期,例如09 – 11月 – 2011

我收到的问题发生在我按提交时.它一直告诉我日期无效….这是有效的,你这个蠢事!

有什么办法,我可以得到jquery / unobtrusive javascript忽略这个字段或允许这种格式通过?到目前为止,我可以让表单工作的唯一方法是,如果我不格式化日期,或使用{0:d}作为日期格式.

编辑:
我已经创建了一个完全独立的布局视图控制器模型来测试这个愚蠢的东西.仍然无法在IE / Safari中运行.
我有来自nuget的最新jquery.validate / unobtrusive文件.

我的布局是空的.它只加载以下文件

"jquery-1.7.min.js"
"jquery-ui-1.8.16.min.js"
"jquery.validate.min.js"
"jquery.validate.unobtrusive.min.js"

我的Testviewmodel很简单:

public class Testviewmodel
{
    [Display(Name = "Test Date:")]
    [DisplayFormat(DataFormatString = "{0:dd/MMM/yyyy}",ApplyFormatInEditMode = true)]
    public DateTime? TestDate { get; set; }
}

我的TestController如下:

public class TestController : Controller
{
    public ActionResult Index()
    {
        var m = new Testviewmodel();
        m.TestDate = DateTime.Now;
        return View(m);
    }
}

我的看法:

@using (Html.BeginForm())
{
    ViewContext.FormContext.ValidationSummaryId = "valSumId";
    @Html.ValidationSummary(false,"The following errors were found:");
    @Html.AntiForgeryToken()

    @Html.LabelFor(m => m.TestDate)
    <input type="date" id="TestDate" value="@Model.TestDate.Value.ToString("dd/MMM/yyyy")" />
    <input type="submit" />
}

没有工作.

你知道烦人的是什么吗?如果我将TestDate更改为字符串,它仍然会失败.

解决方法

我认为格式字符串中的连字符(“ – ”)存在问题:
[DisplayFormat(DataFormatString = "{0:dd-MMM-yyyy}",ApplyFormatInEditMode = true)]

默认情况下,不显眼的验证似乎不接受连字符进行日期格式化.

在我的情况下,我不得不添加自定义客户端方法

$.validator.methods.date = function (value,element) {
    var s = value;
    s = value.replace(/\-/g,'/');

    return this.optional(element) || !/Invalid|NaN/.test(new Date(s));
};

实施here

相关文章

项目要求通过网站上传大文件,比如视频文件,通过摸索实现了文件分片来上传,然后后台进行合并。 使用了...
安装新版本的Nginx(vim /etc/yum.repos.d/nginx.repo) [nginx-stable] name=nginx stable repo baseu...
什么是 SignalR&#160;ASP.NET Core ASP.NET Core SignalR 是一种开放源代码库,可简化将实时 web 功...
在Windows下使用Docker,我们选择Docker Desktop这个软件,非常方便。 ## Docker Desktop介绍及安装 Do...
项目开始设计的是运行在windows下,所以一开始采用的是windows服务模式来获取多媒体文件信息,后来要求...
银河麒麟高级服务器操作系统V10是针对企业级关键业务,适应虚拟化、云计算、大数据、工业互联网时代对主...