我应该与要求的格式(“DD/MM/YYYY”)格式我所有的日期时间属性的通用日期时间编辑模板:MVC3儿童行动打破我的DateTime编辑模板
@Html.TextBox(string.Empty, Model.ToString("dd/MM/yyyy"), new { @class = "datepicker" })
但对于一些原因格式不适合我的孩子的行为。
如果我在做的MainPage @ Html.EditorFor(X => x.MyDate) .cshtml 我得到预期的结果: “23/04/2012”
如果我这样做@ Html.EditorFor(X => x.MyDate)在ChildAction .cshtml 我得到的出乎意料的结果是: “2012-04-24”
我可以确认正在使用的编辑器模板,be澳洲英语,如果我改变它,像这样(注意开头的字符串WTF):
WTF @Html.TextBox(string.Empty, Model.ToString("dd/MM/yyyy"), new { @class = "datepicker" })
然后,如果我在ChildAction.cshtml
做@ Html.EditorFor(X => x.MyDate)我得到:“跆拳道2012-04-24”
任何想法?
更新
在我的追求重现此错误的MVC示例应用程序,我发现,其他两两件事是必需的:
public class DateTimeModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
DateTime date;
if (DateTime.TryParseExact(value.AttemptedValue, "dd/MM/yyyy", DateTimeFormatInfo.CurrentInfo, DateTimeStyles.AssumeLocal, out date))
{
return date;
}
return base.BindModel(controllerContext, bindingContext);
}
}
我假设每个人都知道如何连接该向上。另外,在MainPage.cshtml你必须通过模型的第二个参数的RenderAction
@{Html.RenderAction("Child", Model);}
当传递模型作为第二个参数,MVC使用模型绑定来调用子操作(为什么?)。但是,日期的格式为MM/dd/yyyy,因此它不适用于我的模型联编程序,它假定我所有的日期都是dd/MM/yyyy格式。这就是为什么这不起作用。
但我该如何解决?日期与我的默认格式dd/MM/yyyy不匹配的唯一地方是呈现子动作时。
我不能重现此。你是否使用了一个javascript datepicker库来修改输入值?如果是,请尝试暂时禁用它以查看它是否仍然发生。 – pjumble 2012-04-23 21:38:52
@pjumble查看更新。 – Kelly 2012-04-24 15:30:54