Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ViewModel中的DateTime在控制器中显示为DateTime.MinValue_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

Asp.net mvc ViewModel中的DateTime在控制器中显示为DateTime.MinValue

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

我有一个标准的asp.NETMVC4视图,其中的表单有一些可编辑的字段,包括一个DataTime选项。当表单发回控制器时,DateTime始终显示为DateTime 1/1/0001的最小值,即使有效日期已成功发送到客户端或已在客户端上选择

我猜DefaultModelBinding会把事情搞砸,但我不知道为什么或者如何。在我的web.config中,我有以下关于全球化的信息:

<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