【问题标题】:Respecting DisplayFormat in custom DateTime template在自定义 DateTime 模板中尊重 DisplayFormat
【发布时间】:2014-10-01 22:28:53
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    这只是一种解决方法,但如果模板仅包含“>>@Model>

        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);
        }
    

    【讨论】:

      【解决方案2】:

      类似

      MyDateTimeTemplate.cshtml

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

      【讨论】:

      • 如果没有设置DataFormatString,你也可以添加一个默认值,例如@string.Format(ViewData.ModelMetadata.DisplayFormatString ?? "{0:dd.MM.yyyy mm:hh}", Model)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-06
      • 2011-12-26
      • 1970-01-01
      • 2020-09-16
      • 1970-01-01
      • 2018-05-07
      相关资源
      最近更新 更多