我想创建一个自定义模板,用于显示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)<<
,但这没有输出任何内容(可能是由于递归循环,因为模板调用自身而不是默认值?)
答案 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(">>{0}<<", originalDisplay)
return MvcHtmlString.Create(newDisplay);
}