ASP.NET MVC手动应用DisplayFormat

时间:2016-04-07 09:25:46

标签: c# asp.net asp.net-mvc generics asp.net-mvc-uihint

我有一个带有属性的模型,这个属性类似于:

class PairedData<T>
{
    public T Value {get;set;}
    public bool IsValid {get;set;}
}

在模型中我有:

class SomeModel
{
    [UIHint ("PairedInt")]
    public PairedData<int> SomeInt {get;set;}

    [UIHint ("PairedDateTime")]
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}"]
    public PairedData<DateTime> SomeDate {get;set;}
}

然后在我的PairedDateTime显示模板中,我有:

 @model PairedData<DateTime>

 @Html.DisplayFor(m => m.Value)

问题是DisplayFor没有应用日期格式。原因很明显 - DisplayFormat属性在SomeDate上,而不在Value属性上,所以没有被读取。

所以问题是,有没有办法告诉DisplayFor从其他地方读取属性?或者有没有办法在显示模板中手动将相同的信息传递给DisplayFor?或者有没有办法只在DateTime实例化中将属性应用于Value(我认为不太可能)?

提前致谢。

2 个答案:

答案 0 :(得分:1)

如果您确定这将始终是DateTime:

,您可以尝试在视图上设置此格式
@Html.DisplayFor(m => m.Value, "{0:dd/MM/yyyy}", new {maxlength=10})

这有效,但我建议您使用Daryl和bkaid建议的方法:https://stackoverflow.com/a/6733855/1638261

答案 1 :(得分:0)

DataType Annotation默认情况下会为您提供日期格式mm / dd / yyyy,此输入将是一个下拉列表,并与DisplayFormat结合使用,可以为您提供所需的结果。

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]