MVC 5日期模型绑定

时间:2015-01-19 19:37:45

标签: asp.net asp.net-mvc-5

我最近将MVC 3应用程序升级到MVC 5.我创建了一个新的MVC 5项目并将我的文件放入其中。 似乎日期的处理方式与之前不同。有一个错误验证消息通过使用@Html.ValidationMessageFor(x=>x.mydate)在视图中显示,我无法通过DataAnnotation技术覆盖,甚至使用我之前使用不同文化格式的模型绑定器" dd / MM / yyyy&#34 ;。 有人可以帮我揭示MVC 5中日期验证的变化吗?

我的班级注释

public class passport
{

    [Display(Name = "Fecha de Solicitud")]
    //[DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
    public DateTime? spanishfechaSolicitud { get; set; }
}

和观点。 前

 @Html.TextBoxFor(x => x.passaporte.spanishfechaSolicitud, new { @Value = String.Format("{0:dd/MM/yyyy}", Model.passaporte.spanishfechaSolicitud) })

@Html.EditorFor(x => x.passaporte.spanishfechaSolicitud)

我根据我的建议更新了我的代码。删除DataType属性和值html属性。我也使用了EditorFor()。现在日期在页面上显示正常;然而,javascript验证说"字段Fecha de Solicitud必须是约会。"如果我输入它为MM / dd / yyyy它喜欢它。如何验证此格式? DD / MM / YYYY。提前致谢

2 个答案:

答案 0 :(得分:0)

MVC仅在使用Html.EditorFor()Html.DisplayFor()时使用DisplayFormat格式化日期。 TextBoxFor()不会使用这些属性。

此外,在属性中使用@符号是不正确的,除非该属性是c#保留字(例如@class)。值不是保留字,因此不需要@。

你也不应该覆盖这样的值,你基本上使整个模型绑定毫无意义。

答案 1 :(得分:0)

在寻找jquery验证错误的解决方案之后。我发现这个代码解决了我在客户端的问题。我已经在服务器上进行了验证,这是有效的。我在这里分享我的发现。

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