EditorForのカスタムヘルパーを作成しようとしています。私は、モデルから文字列の長さを取り、これをhtml属性に追加したいと思います。MVC Editor Forカスタムヘルパー
私はこれまでのところ次のようなことがありますが、これは追加される新しい属性には当てはまりません。
public static IHtmlString MyEditorFor<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> expression, object ViewData, bool disabled = false, bool visible = true)
{
var member = expression.Body as MemberExpression;
var stringLength = member.Member.GetCustomAttributes(typeof(StringLengthAttribute), false).FirstOrDefault() as StringLengthAttribute;
RouteValueDictionary viewData = HtmlHelper.AnonymousObjectToHtmlAttributes(ViewData);
RouteValueDictionary htmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(viewData["htmlAttributes"]);
if (stringLength != null)
{
htmlAttributes.Add("maxlength", stringLength.MaximumLength);
}
return htmlHelper.EditorFor(expression, ViewData);
}
'htmlHelper.EditorForを返す
以前のMVCのバージョンの、
HtmlHelper.TextBoxFor
の利用がより確実maxlength
属性を持っている、好ましいです(式、ViewData) 'は属性を追加していません。メソッドに渡した元の 'ViewData'属性をそのまま使用します –それを編集して属性を返すにはどうしたらいいですか?新しいviewDataオブジェクトを別の型として返すことができません – user3208483