由于日期格式,验证失败

时间:2017-07-18 14:13:12

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

我有一个MVC6编辑视图,其出生日期字段如下:

<div class="form-group">
    @Html.LabelFor(model => model.DateOfBirth, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @*@Html.EditorFor(model => model.DateOfBirth, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.DateOfBirth, "", new { @class = "text-danger" })*@
        @Html.EditorFor(m => m.DateOfBirth,new { htmlAttributes = new { @readonly = "readonly" } })
        @Html.ValidationMessageFor(model => model.DateOfBirth, "", new { @class = "text-danger" })
    </div>
</div>

因此,当我点击保存时,错误说:价值&#39; 07/17/1981&#39;对ApplicationDate无效。如何确保日期以英国格式显示,表示验证成功。

我已按照以下答案将以下内容添加到Bubdle.Config中:

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                        "~/Scripts/jquery-{version}.js",
                        "~/Scripts/globalize.js",
                        "~/Scripts/jquery.validate.globalize.js"));

4 个答案:

答案 0 :(得分:0)

像这样更新您的模型:

// Add this attribute
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] 
public  DateTime DateOfBirth { get; set; }

答案 1 :(得分:0)

我假设你的错误是客户端的?即不引人注意的验证? 已发布的解决方案的另一种解决方案是使用全球化。

有一个Nuget包可用&#34; jQuery.Validation.Globalize。您可以安装它,只需在您的jqueryval包中包含globalize Javascript文件。

您可以通过导航到App_Start目录并编辑BundleConfig.cs文件来执行此操作。 您会看到ScriptBundle已经存在bundles/jqueryval - 您可以将globalize.jsjquery.val.globalize.js文件的路径添加到该文件中,或者创建单独的ScriptBundle {1}}在您的视图中引用。

注意:这仅在您将CultureInfo添加到Global.asax文件中时才有效。

您还需要将以下内容添加到Global.asax文件中。

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB");

答案 2 :(得分:0)

在导演Views/Shared/EditorTemplates中,我添加了一个视图UKDate

我的特定观点的代码是:

@model DateTime?

@{
    if (Model.HasValue)
    {
        var classname = ViewData["class"];
        var id = ViewData["id"];

        <input type="text"
               name="@ViewData.TemplateInfo.HtmlFieldPrefix" //this needed to map the input to the property in your model, by the default model binder.
               value="@Model.Value.ToString("dd/MM/yyyy")" 
               class="@classname"
               id="@id"
            />
    }
}

然后使用它我执行以下操作:

@Html.EditorFor(x => x.YourDateFieldDate, "UKDate", new { @class = "any css classes required here", id = "Id here" })

由于现在没有data-val-date属性,因此未运行验证。因此,如果您不关心任何客户端日期验证,这可以解决问题。

答案 3 :(得分:0)

查看此页面上的示例,检查它是否符合您的要求。

https://johnnyreilly.github.io/jQuery.Validation.Unobtrusive.Native/AdvancedDemo/Globalize.html

我看到你问为什么你需要包含jquery,答案是因为微软验证发生在jquery,他们共同努力实现这一点。

如果您的页面是英语en-US,则默认验证将起作用,但如果您的文化与我的不同,您至少需要包含该页面中提到的内容(基本上是jquery,全球化和验证)。

全球化将覆盖验证,以便在您想要的文化中发挥作用。

尝试一下,让我知道。