次のコードを考えると、次のパターンにならなければならないのはコードの匂いですか?
モデル:
class Product
{
public int Id { get; set; }
public string Name { get; set; }
public Category Cat { get; set; }
}
class Category
{
public int Id { get; set; }
public string Label { get; set; }
}
Product を編集するためのビュー:
<% =Html.EditorFor( x => x.Name ) %>
<% =Html.EditorFor( x => x.Category ) %>
カテゴリの EditorTemplate
<% =Html.DropDownList<Category>() %>
HtmlHelper メソッド
public static MvcHtmlString DropDownList<TEntity>(this HtmlHelper helper)
where TEntity : Entity
{
var selectList = new SelectList(
ServiceLocator.GetInstance<SomethingGivingMe<TEntity>>().GetAll(),
"Id", "Label");
return SelectExtensions.DropDownList(helper, "List", selectList, null, null);
}
参考までに、ヘルパー メソッドの実際の実装では、DataTextField と DataValueField の名前、選択された値などを取得するためにいくつかのラムダが必要です。
気になる点は、HtmlHelper 内で servicelocator を使用していることです。Product モデルに AllCategories プロパティが必要だと思いますが、必要になるたびにコントローラーに値を設定する必要があります。
したがって、ヘルパー メソッドは汎用的であるため、私が使用しているソリューションはより簡単だと思います (ここには含まれていないモデル バインダーも同様です)。したがって、DropDownList を必要とするタイプごとに EditorTemplate を作成するだけです。
何かアドバイス ?