私はこれが古い質問です知っているが、私はここに貢献できると思った。私は同じ問題を抱えていて、エディタテンプレートを作ることを避けたかったのです。私は、ビュー内でHtml.EditorForを使用するときにhtml属性を指定できる汎用ソリューションのすべてのソリューションを必要としていました。
本当にCIAの回答が気に入っていましたが、必要な属性を渡すために少し拡張しました。
public static class EditorForExtentions
{
public static MvcHtmlString EditorFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, Object htmlAttributes, bool extendAttributes)
{
string value = html.EditorFor(expression).ToString();
PropertyInfo[] properties = htmlAttributes.GetType().GetProperties();
foreach (PropertyInfo info in properties)
{
int index = value.ToLower().IndexOf(info.Name.ToLower() + "=");
if (index < 0)
value = value.Insert(value.Length - (value.EndsWith("/>") ? 2 : 1), info.Name.ToLower() + "=\"" + info.GetValue(htmlAttributes, null) + "\"");
else if (extendAttributes)
value = value.Insert(index + info.Name.Length + 2, info.GetValue(htmlAttributes, null) + " ");
}
return MvcHtmlString.Create(value);
}
}
あなたはそれがHTML文字列を取得するには、通常のHtml.EditorForメソッドを使用しています。この
<%=Html.EditorFor(m => m.StartDate, new { @class = "datepicker" }, true)%>
ようなビューでそれを呼び出すことができます - :私は、HTML属性を受け入れ、余分なHtml.EditorForメソッドを作成しました必要なhtml属性を注入します。
データをeditmodeにする必要がある場合、これは機能しません。すなわち、 '[DisplayFormat(DataFormatString =" {0:dd-MMMM-yyyy} "、ApplyFormatInEditMode = true)]'のようなものであなたのモデルを飾ることはできません。 – Abel
この問題の解決策はまだありますか? – akd