1

我想创建一个自定义模板来显示类型的属性,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)<<了,但这没有输出任何东西(可能是由于模板调用自身而不是默认的递归循环?)

4

2 回答 2

4

Something like

MyDateTimeTemplate.cshtml

<div>
  <span>>></span>
  <span>@string.Format(ViewData.ModelMetadata.DisplayFormatString, Model)</span>
  <span><<</span>
</div>
于 2014-08-08T12:50:58.520 回答
1

这只是一种解决方法,但如果模板仅包含“>>@Model<<”,那么您可能想要创建一个 HtmlHelper。在辅助方法的主体中获取@Html.DisplayFor,然后将其包装在>> <<。像这样的东西(没有检查代码是否有效,但希望能让你开始):

    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);
    }
于 2014-08-08T12:39:24.353 回答