用于输出html数据属性的自定义模型属性

时间:2017-08-10 10:41:20

标签: c# asp.net-core-mvc

我希望能够创建一个属性,例如[AttachDatePicker]来装饰我的ViewModel日期时间属性,所以当我使用脚手架时,它输出例如data-datepicker是html元素的html属性,我希望将datepicker附加到。

我可以基于微软示例here来做到这一点,但它感觉不对,因为它与我需要的验证无关。

理想情况下,我想避免创建自定义模板。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

为什么不定义Editor Template并将DateTime属性归为[UIHint]

例如,创建Views / Shared / EditorTemplates / Datepicker.cshtml

@model DateTime

@{
   IDictionary<string, object> htmlAttributes = new Dictionary<string, object>(); 
   // TODO: retrieve annotations from Model Metadata and add html attributes accordingly, e.g. "required"
   htmlAttributes.Add("data-datepicker", "");
}

<div class="@* TODO: set classes depending on your CSS framework *@">
    @Html.TextBox("", Model, htmlAttributes)
</div>

使用[UIHint("{name of editor template}")]

对ViewModel进行属性化
[Required] // example of an annotation you might want to handle
[UIHint("Datepicker")]
public DateTime SelectedDate { get; set; }

使用EditorFor渲染属性,这将调度到正确的模板

@Html.EditorFor(m => m.SelectedDate)