在自定义DateTime模板中尊重DisplayFormat

时间:2014-08-08 12:28:51

标签: asp.net asp.net-mvc asp.net-mvc-3 datatemplate displayformat

我想创建一个自定义模板,用于显示DateTime类型的属性,同时仍然可以使用类中的DisplayFormat装饰来定义格式。

假设我想使用模板围绕>><<的每个日期。
这将是班级:

public class Item
{
    public virtual Guid Id { get; set; }

    [UIHint("MyDateTimeTemplate")]
    [DisplayFormat(DataFormatString = "{0:dd.MM.yyyy mm:hh}")] //no seconds
    public virtual DateTime CreatedOn { get; set; }
}

但使用>>@Model<<作为MyDateTimeTemplate.cshtml模板并不尊重DataFormatString

我也尝试了>>@Html.DisplayFor(x => Model)<<,但这没有输出任何内容(可能是由于递归循环,因为模板调用自身而不是默认值?)

2 个答案:

答案 0 :(得分:4)

这样的东西

MyDateTimeTemplate.cshtml

<div>
  <span>>></span>
  <span>@string.Format(ViewData.ModelMetadata.DisplayFormatString, Model)</span>
  <span><<</span>
</div>

答案 1 :(得分:1)

这只是一种解决方法,但如果模板只包含&#34;&gt;&gt; @ Model&lt;&lt;&#34;也许你想要创建一个HtmlHelper。在帮助方法的主体中获取@ Html.DisplayFor,然后将其包装在&gt;&gt;中&LT;&LT ;.像这样的东西(没有检查代码是否有效,但希望能让你开始):

    public static MvcHtmlString DisplayWrappedDateFor<TModel>(this HtmlHelper<TModel> html, Expression<Func<TModel, DateTime>> expression)
    {
        var originalDisplay = html.DisplayFor(expression).ToHtmlString();
        var newDisplay = String.Format("&gt;&gt;{0}&lt;&lt;", originalDisplay)

        return MvcHtmlString.Create(newDisplay);
    }