当前位置:  开发笔记 > 编程语言 > 正文

绑定时的格式化日期(ASP.NET MVC)

如何解决《绑定时的格式化日期(ASP.NETMVC)》经验,为你挑选了3个好方法。

在我的ASP.net MVC应用程序中,我有一个看起来像这样的视图:

...

<%=Html.TextBox("due")%>
...

我使用a ModelBinder将帖子绑定到我的模型(到期属性是DateTime类型).问题是当我将"01/01/2009"放入文本框时,帖子没有验证(由于其他数据输入不正确).活页夹以日期和时间 "01/01/2009 00:00:00 " 重新填充.

有没有办法告诉活页夹正确格式化日期(即ToShortDateString())?



1> Nick Chadwic..:

我刚刚遇到了这个非常简单而优雅的解决方案,可以在MVC 2中找到:

http://geekswithblogs.net/michelotti/archive/2010/02/05/mvc-2-editor-template-with-datetime.aspx

基本上,如果您使用的是MVC 2.0,请在视图中使用以下内容.

 <%=Html.LabelFor(m => m.due) %>
 <%=Html.EditorFor(m => m.due)%>

然后在/ Views/Shared/EditorTemplates中创建一个名为DateTime.ascx的局部视图

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%=Html.TextBox("", (Model.HasValue ? Model.Value.ToShortDateString() : string.Empty), new { @class = "datePicker" }) %>

当调用EditorFor <>时,它将找到匹配的编辑器模板.


@ saw-lau:您可以使用不同的名称创建多个模板,然后根据需要将模板名称作为第二个参数传递给Html.EditorFor().
这对我有用,但肯定会取代DateTimes的所有*实例......如果你对不同的实例有不同的格式要求怎么办?

2> 小智..:

使用属性装饰模型中的DataType属性,并指定其a Date,而不是DateTime:

public class Model {
  [DataType(DataType.Date)]
  public DateTime? Due { get; set; }
}

你必须使用EditorFor而不是TextBoxFor在视图中:

@Html.EditorFor(m => m.Due)



3> Cephas..:

这是一个肮脏的黑客,但它似乎工作.

<%= Html.TextBoxFor(model => model.SomeDate,
    new Dictionary { { "Value", Model.SomeDate.ToShortDateString() } })%>

您获得了模型绑定,并且能够使用格式化字符串覆盖文本字段的HTML"value"属性.


我喜欢.简短又甜蜜.这是我的轻微变化:<%= Html.TextBoxFor(model => model.SomeDate,new {@Value = Model.SomeDate.ToShortDateString()})%>
推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有