私のプロジェクトでは、このようなシナリオが機能しています。私は MVC3 を使用していますが、これが当てはまると思います。
私のViewModelには、次のように定義されたプロパティがあります。
private List<SelectListItemWithAttributes> pLeadDispositions = null;
public List<SelectListItemWithAttributes> LeadDispositions {
get {
var LeadDispositionItems = (
from c in db.GetLeadDispositionList(1, 1000)
where c.AccountTypeID == this.AccountTypeID
select new SelectListItemWithAttributes() { Text = c.Title, Value = c.ID.ToString(), HtmlAttributes = new Dictionary<string, string> { { "data-callback", c.RequiresCallback.ToString().ToLower() } } } ).ToList()
;
LeadDispositionItems.Insert(0, new SelectListItemWithAttributes() { Text = "-- Select --", Value = "", HtmlAttributes = new Dictionary<string, string> { { "data-callback", "false" } } });
return LeadDispositionItems;
}
}
SelectListItemWithAttributes は、私が使用している SelectListItem の単なるサブクラスであるため、それを SelectListItem に置き換えてパラメーター リストを変更するだけです。GetLeadDispositionList は、データベースから必要なデータを取得するストアド プロシージャです。
私の見解では、次のようになります。
@Html.DropDownListWithItemAttributesFor(m => m.LeadDispositionID, Model.LeadDispositions)
DropDownListWithItemAttributesFor は、自分のプロジェクトで使用している DropDownListFor のサブクラスなので、DropDownListFor を代用するだけです
これがまさにあなたが探しているものではないことはわかっていますが、正しい方向に向けられるかもしれません。
これが役立つことを願っています。