ASP.NET MVC 5からEditorForにadditionalViewDataを渡せるようになり、HTMLの属性などを指定できるように作れるようになりました。
受け取ったhtmlAttributesをそのまま指定するだけなら簡単ですが、エディターテンプレート側でclass属性などを付けている場合があり、そういう場合はパラメータとして受け取ったものとエディターテンプレートで付けようとしているものをマージしてやる必要があります。とはいえhtmlAttributesはおおむね匿名型で来るのでマージできない……
と思ったら、まさにそれ用のHtmlHelper.AnonymousObjectToHtmlAttributes()
という匿名型をディクショナリに変換するメソッドがありました。
@Html.EditorFor(model => model, new { htmlAttributes = new { @class = "form-control" }, })
EditorTemplate/DateTime.cshtml
@model System.DateTime?
@{
var htmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(ViewData["htmlAttributes"]);
htmlAttributes.Add("class", "datepicker");
}
@Html.TextBox("", Model != null ? Model.Value.ToString("yyyy/MM/dd") : "", htmlAttributes)