我有一个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"));
答案 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.js
和jquery.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,全球化和验证)。
全球化将覆盖验证,以便在您想要的文化中发挥作用。
尝试一下,让我知道。