エディター用の HTML ヘルパーを作成しています。アイデアは、属性 AutoGenerateField を使用してモデルからプロパティを取得し、テーブルを作成することです。テーブルの各行には、フィールドの名前 (属性からも) と、フィールドの実際の値を含む TextBox または CheckBox が含まれます。
HTMLHelper に問題があります。1 つの値ではなくモデル全体をヘルパーに送信するため、次のようなパラメーターが必要なため、TextBoxFor などのメソッドを使用できません。
"Expression<Func<TModel, TValue>> expression".
私は反射を使用しており、代わりにプロパティを送信しようとしましたが、VisualStudio はこれを不適切な使用法と見なします。
以下は、私の HtmlHelper の簡略化された方法です。
public static MvcHtmlString GenerateEditor<TModel>(this HtmlHelper<TModel> htmlHelper)
{
var model = htmlHelper.ViewData.Model;
var result = String.Empty;
//generating container, etc ...
foreach (var property in model.GetType().GetProperties())
{
var attr = property.GetCustomAttributes(typeof (DisplayAttribute), true).FirstOrDefault();
if (attr == null) continue;
var autoGenerate = ((DisplayAttribute)attr).AutoGenerateField;
if(autoGenerate)
{
//here I'm building the html string
//My problem is in the line below:
var r = htmlHelper.TextBoxFor(property);
}
}
return MvcHtmlString.Create(result);
}
何か案は?