【问题标题】:How to customize DateTime format using Editor Templates in MVC如何使用 MVC 中的编辑器模板自定义 DateTime 格式
【发布时间】:2015-04-19 20:45:38
【问题描述】:

question 的可能副本

但我尝试了该步骤(我通过 POST 收到)但没有成功。

我的全球化设置是<globalization uiCulture="en-in" culture="en-in"/>

模板代码是

@model DateTime?

@Html.TextBox(
    "",
    Model.HasValue ? @ViewData.TemplateInfo.FormattedModelValue : "",
    new { @class = "date" })

以及元数据代码

 [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}",
            ApplyFormatInEditMode = true)]
        [DisplayName("Employee Hire Date")]
        public DateTime HireDate { get; set; }

这是我正在使用的js

<script type="text/javascript">
    $(function () {
        $("input:text.date").datepicker({ dateFormat: "dd/mm/yy" });
    });
</script>

它接受日期范围为,

11/01/2015
7/05/2015
12/04/2015

但是如果我给了这个

    30/04/2015

模型验证失败。

无法解决此问题。 我作为初学者开始学习 MVC。所以请承担这个问题。 请帮帮我。

更新

If i change my js code like this
$(function () {
        $("input:text.date").datepicker({ dateFormat: "dd/MM/yy" });
    });

但格式更改为'30/April/2015',这是我不想要的。

【问题讨论】:

  • 您的意思是客户端验证失败?
  • @StephenMuecke 提交表单后我收到此错误,文本框边显示The field Employee Hire Date must be a date.
  • 你有@Html.ValidationMessageFor() 的属性。当你点击提交时它是否真的击中了控制器?
  • 否,如果它给出该错误它没有击中控制器。对于我提到的前三个范围,它会命中控制器

标签: c# asp.net asp.net-mvc asp.net-mvc-4


【解决方案1】:

发生错误是因为jquery.validate.js 使用失败的javascript 日期构造函数(new Date(value)) 验证日期。您可以使用jquery globalize 插件,也可以通过添加以下脚本来覆盖jquery.validate 方法(假设这是jqueryUI datepicker)

<script>
  // do NOT wrap in document.ready
  $.validator.addMethod('date', function (value, element) {
    if (this.optional(element)) {
      return true;
    }
    var valid = true;
    try {
      $.datepicker.parseDate('dd/mm/yy', value);
    }
    catch (err) {
      valid = false;
    }
    return valid;
  });
</script>

旁注:

  1. ApplyFormatInEditMode = true 仅在使用时适用 EditorFor() 生成 HTML5 的浏览器实现 datepicker(在这种情况下,无论如何它都需要是DataFormatString = "{0:yyyy-MM-dd}),以便可以将其删除。
  2. 你的模板是不必要的,你应该使用@Html.TextBoxFor(m =&gt; m.HireDate, "{0:dd/MM/yyyy}", new { @class = "date" })

【讨论】:

  • 感谢您的回复.. 我在那个页面中添加了这个脚本,但我仍然得到那个错误
  • 确保将其添加到 jquery.jsjquery.validate.js 文件之后,并且不要将其包装在 document.ready() 中。您能否确认您正在使用 jqueryUI 日期选择器。
  • 我在那里添加了我的完整代码。如果我提醒它的值 valid 它说 true ,我仍然得到那个错误
  • 为了测试,将@Html.EditorForModel()替换为@Html.TextBoxFor(m =&gt; m.HireDate, "{0:dd/MM/yyyy}", new { @class = "date" })@Html.ValidationMessageFor(m =&gt; m.HireDate)
  • 我替换并检查了.. 不幸的是同样的错误来了.. :(
【解决方案2】:

斯蒂芬斯的答案是正确的。我仍然像这样修改了脚本以使 jquery.validate 工作

$.validator.methods.date = function (value, element) {
   return this.optional(element) || $.datepicker.parseDate("dd/mm/yy", value);
}

我想这两者之间没有区别。这个还在工作,这个

 $.validator.addMethod('date', function (value, element) {
    if (this.optional(element)) {
      return true;
    }
    var valid = true;
    try {
      $.datepicker.parseDate('dd/mm/yy', value);
    }
    catch (err) {
      valid = false;
    }
    return valid;
  });

不工作。

如果有人发现请给我打电话.. 谢谢!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-08
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 2011-02-18
    相关资源
    最近更新 更多