Asp.net mvc ViewModel中的DateTime在控制器中显示为DateTime.MinValue
我有一个标准的asp.NETMVC4视图,其中的表单有一些可编辑的字段,包括一个DataTime选项。当表单发回控制器时,DateTime始终显示为DateTime 1/1/0001的最小值,即使有效日期已成功发送到客户端或已在客户端上选择 我猜DefaultModelBinding会把事情搞砸,但我不知道为什么或者如何。在我的web.config中,我有以下关于全球化的信息:Asp.net mvc ViewModel中的DateTime在控制器中显示为DateTime.MinValue,asp.net-mvc,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 4,我有一个标准的asp.NETMVC4视图,其中的表单有一些可编辑的字段,包括一个DataTime选项。当表单发回控制器时,DateTime始终显示为DateTime 1/1/0001的最小值,即使有效日期已成功发送到客户端或已在客户端上选择 我猜DefaultModelBinding会把事情搞砸,但我不知道为什么或者如何。在我的web.config中,我有以下关于全球化的信息: <globalization enableClientBasedCulture="true" uiCulture
<globalization enableClientBasedCulture="true" uiCulture="auto" culture="auto"/>
以下是视图的相关部分:
@model KBMaxLive.Domain.KBUser
@using (Html.BeginForm("Edit", "User", new { idUser = Request["idUser"] }, FormMethod.Post, new { id = "form" }))
{
<fieldset>
<legend>@Engine.Resources.KBMaxLive.Account</legend>
<div class="field-column-container">
<div class="field-column">
<div class="field-container">
@Html.LabelFor(u => u.CreatedDate)
@Html.TextBoxFor(u => u.CreatedDate, new { @class = "k-textbox", @readonly = "readonly" })
@Html.ValidationMessageFor(u => u.CreatedDate)
</div>
</div>
</div>
</fieldset>
}
@model KBMaxLive.Domain.KBUser
@使用(Html.BeginForm(“编辑”,“用户”,新{idUser=Request[“idUser”]},FormMethod.Post,新{id=“form”}))
{
@Engine.Resources.KBMaxLive.Account
@LabelFor(u=>u.CreatedDate)
@TextBoxFor(u=>u.CreatedDate,新的{@class=“k-textbox”,@readonly=“readonly”})
@Html.ValidationMessageFor(u=>u.CreatedDate)
}
除了datetime之外,模型的所有属性都很好。有没有关于哪里出了问题或如何调试的想法?在解析POST请求的日期时间时,默认的模型绑定器使用当前区域性。从您显示的web.config的代码片段来看,您似乎正在使用
auto
。这意味着当前区域性将由客户端浏览器首选项决定。例如,在Google Chrome中,您可以配置语言列表及其优先顺序。然后,浏览器将随每个请求发送接受语言
标题
例如:
Accept-Language:en-US,en;q=0.8
然后ASP.NET MVC将使用此语言为请求设置区域性。这意味着模型绑定器希望以为此语言定义的格式输入日期时间。对于en-US
,将是MM/dd/yyyy
。如果已将浏览器配置为使用不同的首选语言,则用户需要根据此首选项键入日期时间
另一方面,如果希望所有日期都采用特定格式,无论客户端浏览器配置如何,都可以编写自定义模型绑定器。例如,我已经演示了如何在相应的视图模型属性上使用
DisplayFormat
属性来完成此操作。DateTime.MinValue是DateTime的默认值。我怀疑您的属性名和参数名不匹配,或者该值不能作为DateTime进行分析。已编辑以显示编辑视图的相关部分。虽然我不确定视图是否有问题,因为即使我没有显示日期时间的字段,它仍然会作为日期时间返回到帖子中。MinValue您可以使用FireBug或Chrome inspector来确定该值是否实际随帖子一起发送回来吗?另外,你能给我们看看你的模型吗?注意:我通常不会使用POST中的值在模型上设置创建日期(用户可以很容易地使用FireBug来简单地更改覆盖只读设置的值);我把它放在后端。tvanfosson,请看我对下面答案的评论。在Firebug的帖子中,日期似乎还可以,而且格式似乎正确。它只是没有进入Firebug中的controllerIn,Accept Language标题作为“en-us,en;q=0.5’。此外,CreatedDate的格式如下:“8/23/2011 9:59:10 PM”。对于语言设置,该格式看起来不错,甚至通过测试DateTime.Parse(“8/23/2011 9:59:10 PM”)验证了这一点,测试成功。尽管如此,还是以MinValue的身份出现
Accept-Language:en-US,en;q=0.8