ajax対応のドロップダウンリストをレンダリングするカスタムAjaxHelperがあります。以下のコード。ヘルパーはうまく機能しますが、検証が失敗したときに input-validation-error クラスが追加されないため、他のフォーム要素で希望どおりに強調表示されません。Html ヘルパーでは、HtmlHelper.GetUnobtrusiveValidationAttributes() によって指定された属性をマージできます。しかし、AjaxHelper でこれを行うにはどうすればよいでしょうか。
public static MvcHtmlString DropDownList(this AjaxHelper ajaxHelper, string name,
IEnumerable<SelectListItem> list, string optionLabel,
AjaxOptions ajaxOptions, object htmlAttributes)
{
var tag = new TagBuilder("select");
StringBuilder options = new StringBuilder();
tag.MergeAttribute("name", name);
tag.MergeAttribute("id", name);
TagBuilder option;
if (optionLabel != null)
{
option = new TagBuilder("option");
option.MergeAttribute("value", string.Empty);
option.SetInnerText(optionLabel);
options.Append(option.ToString());
}
foreach (SelectListItem item in list)
{
option = new TagBuilder("option");
option.MergeAttribute("value", item.Value);
if (item.Selected)
{
option.MergeAttribute("selected", "selected");
}
option.SetInnerText(item.Text);
options.Append(option.ToString());
}
tag.InnerHtml = options.ToString();
tag.MergeAttributes(HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
tag.MergeAttributes((ajaxOptions ?? new AjaxOptions()).ToUnobtrusiveHtmlAttributes());
return MvcHtmlString.Create(tag.ToString(TagRenderMode.Normal));
}