0

まず、次のようなビュー モデルがあります。

[Required]
[Display(Name = "Department")]
[UIHint("DropDown", "MVC", "SelectListName", "DepartmentSelectList")]
public Guid? DepartmentId { get; set; }

DropDown次のように機能する(UIHintによって設定された)エディターテンプレートがあります。

@{
    var list = this.GetModelSelectList();
}
@Html.DropDownListFor(m => Model, list)

このthis.GetModelSelectList()呼び出しは、ドロップダウンが ViewData に存在するために使用される SelectList オブジェクトに依存しています。カスタムコントローラーの基本クラスで次のオーバーライドを使用して、これを保証しようとします。

protected override ViewResult View(string viewName, string masterName, object model)
{
    var result = base.View(viewName, masterName, model);
    if ((model is ViewModel) && (!ViewData.ContainsKey(SelectListsViewDataKey)))
    {
        var vm = (ViewModel)model;
        result.ViewData.Add(SelectListsViewDataKey, vm.GetSelectLists());
    }
    return result;
}

これにより、選択リストを追加してデータを表示するために、コントローラー全体で明示的な呼び出しを行う必要がなくなります。SelectList 型のプロパティは、常にビュー データで使用できます。

私の質問は、おそらくこの注射のより良い方法があるかどうかです. この種のアプリケーションにより専用または適したエントリ ポイントはありますか?

EDIT:単一のビューモデルプロパティのエディターテンプレートがビューモデルインスタンス全体にアクセスする方法がなく、選択リストオブジェクトがこのインスタンスにあるため、これを行っています。https://stackoverflow.com/a/9867542/8741を参照してください

4

0 に答える 0