【问题标题】:ASP.NET MVC Manually Applying DisplayFormatASP.NET MVC 手动应用 DisplayFormat
【发布时间】:2016-04-07 09:25:45
【问题描述】:

我有一个具有通用属性的模型,类似于:

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 (我认为不太可能)?

提前致谢。

【问题讨论】:

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


    【解决方案1】:

    如果您确定这将始终是日期时间,您可以尝试在视图上设置格式:

    @Html.DisplayFor(m => m.Value, "{0:dd/MM/yyyy}", new {maxlength=10})
    

    这可行,但我会向您推荐 Daryl 和 bkaid 建议的方法:https://stackoverflow.com/a/6733855/1638261

    【讨论】:

    • 谢谢 - 在这种特定情况下会这样做。我仍然对更通用的方法感兴趣。
    • 实际上,这似乎行不通。字符串参数是模板名称,而不是日期格式。我在链接的文章中没有看到任何关于格式化的内容。
    【解决方案2】:

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

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

    【讨论】:

    • 问题是我使用的是泛型,因此尽管该注释适用于 DateTime 实例化,但不适用于 int。问题仍然存在 - 如何将不同的属性应用于泛型的不同实例化?
    猜你喜欢
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多