我正在尝试弄清楚如何使用MVC3 RC2和用数据通道装饰的型号格式化日期。

这是我的模型...

public class Model
{
    [Display(Name = "Date of Birth")]
    [DisplayFormat(@DataFormatString = "MM/dd/yyyy")]
    public DateTime DateOfBirth { get; set; }
}

这是我的控制器...

public class IndexController : Controller
{
    public ActionResult Index()
    {
        return View( new Model() {DateOfBirth = DateTime.Now});
    }
}

这是我的观点...

@model MvcApplication6.Models.Model

@Html.LabelFor(m=>m.DateOfBirth)
@Html.TextBoxFor(m => m.DateOfBirth)
@Html.EditorFor(m => m.DateOfBirth)

当我运行该站点时,对于两个控件,该页面显示一个文本框,并在字符串中包含的时间(当我想要的日期)(按模型中的装饰属性指定)时。

我用布拉德·威尔逊的 文章 在此模式的模型上。

我做错了什么?

有帮助吗?

解决方案

做这个:

[DisplayName("Date of Birth")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime DateOfBirth { get; set; }

其他提示

实际上,我认为这里的问题与以下事实有关。 DefaultModelBinder 不能以适当的方式处理数据(这意味着我们不能将前端字段绑定到DateTime 部分的, ,就像我们以前在他人中所做的一样咳嗽 Castlemonorail 咳嗽] MVC框架)。

我已经创建了一个自定义模型粘合剂来解决该问题。但是斯科特·汉塞尔曼(Scott Hanselman)做了类似的事情 这里, ,所以我想您可以使用他的解决方案。

当然,您可以通过属性处理这种情况,但这意味着您需要在 全部 DateTime字段。这不会解决另一个问题:有时我们需要在日期零件上有一个字段,而在时间部分则需要一个字段 仅在前端, ,并将单个DateTime字段保留在后端。该模型粘合剂解决方案允许这完全允许。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top