3

我试图弄清楚如何使用 MVC3 RC2 和用 DataAnnotations 装饰的模型来格式化日期。

这是我的模型...

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)

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

对于这种模式,我使用了 Brad Wilson关于 ModelMetaData的文章。

我做错了什么很明显吗?

4

2 回答 2

7

做这个:

[DisplayName("Date of Birth")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime DateOfBirth { get; set; }
于 2011-01-07T19:35:58.513 回答
0

事实上,我认为这里的问题与DefaultModelBinder没有以适当的方式处理日期时间有关(这意味着我们不能将前端字段绑定到 DateTime部分,就像我们过去在其他人中所做的那样[咳嗽 CastleMonorail ] MVC 框架)。

我已经创建了一个自定义模型绑定器来解决这个问题。但是 Scott Hanselman 在这里做了类似的事情,所以我想你可以使用他的解决方案。

当然,您可以通过属性来处理这种情况,但这意味着您需要在所有DateTime 字段中指定特殊格式。这并不能解决另一个问题:有时我们只需要在前端有一个字段用于日期部分,另一个用于时间部分,并在后端保留一个日期时间字段。这种模型粘合剂解决方案正是允许这样做的。

于 2011-01-07T19:39:01.390 回答