【问题标题】:Problem with MVC ModelMetaData attributes and formatting a DateMVC ModelMetaData 属性和格式化日期的问题
【发布时间】:2013-06-02 15:41:42
【问题描述】:

我正在尝试弄清楚如何使用 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)

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

我在 ModelMetaData 上使用了 Brad Wilson 的 article 来实现这个模式。

我做错了什么很明显吗?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 datetime data-annotations modelmetadata


    【解决方案1】:

    这样做:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2013-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-16
        相关资源
        最近更新 更多