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

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

发布时间:2020-12-16 04:13:57 所属栏目:asp.Net 来源:网络整理
导读:我有一个日期字段(我使用 jquery ui datepicker)在我格式化的表单中,如下所示: 视图模型 [DisplayFormat(DataFormatString = "{0:dd-MMM-yyyy}",ApplyFormatInEditMode = true)]public DateTime FooDate { get; set; } 视图 @Html.EditorFor(m = m.FooDate)
我有一个日期字段(我使用 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

(编辑:李大同)

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

    推荐文章
      热点阅读