現在、DropDownListFor()オブジェクトに値が設定されているとは幸いです。私は可能な限りIEnumerableを実装する一般的な方法を見つけることを試みています。これは私がこれまで持っていたものです。ASP.NET MVC 3 List <T> to IEnumerable <SelectListItem>
ヘルパー:
public static List<SelectListItem> ToSelectList(IDictionary<string,string> dictionaryItems, string selectedValue, string noSelection, bool search = false)
{
List<SelectListItem> items = new List<SelectListItem>();
if (search)
{
items.Add(new SelectListItem { Selected = true, Value = "-1", Text = string.Format("-- {0} --", noSelection) });
}
foreach (var item in dictionaryItems)
{
items.Add(new SelectListItem
{
Text = item.Key,
Value = item.Value,
Selected = selectedValue == item.Value ? true : false
});
}
return items
.OrderBy(l => l.Text)
.ToList();
}
コントローラー:
[HttpGet]
public ActionResult Index()
{
var model = new CreateModel();
var parentOrganisations = _orgs.FindBy(o => o.OwningOrganisationID == Globals.OrganisationID || o.ID == Globals.OrganisationID)
.OrderBy(o => o.OrganisationName);
Dictionary<string, string> items = new Dictionary<string, string>();
foreach (var item in parentOrganisations)
{
items.Add(item.OrganisationName, item.ID.ToString());
}
model.Organisations = SelectLists.ToSelectList(items, "-1", "-- None -- ", true);
return View(model);
}
ビュー:
<div class="control-group">
<label class="control-label">Parent Organisation</label>
<div class="controls">
@Html.DropDownListFor(m => m.ParentOrganisationID, Model.Organisations, new { @class = "input-xlarge"})
<p class="help-block">Select a parent organisation to create a branch</p>
</div>
</div>
コントローラに反復コードのLOTがあるようです。それは汎用リストを取り、値とテキストを辞書に追加し、それをモデルの一部として送る選択リストを構築するヘルパーの入力として使用します。
誰でもこれを達成するためのより良い方法はありますか?私はコントローラーに膨らみがありません。フォームにいくつかのドロップダウンがあると、これはまさにこのインスタンスで起こることです。
おかげで、
EDIT - ケネスのヘルパーメソッドのおかげで、私は今、コントローラで1つのコールに全体を統合しました:
model.Organisations = _orgs.FindBy(o => o.OwningOrganisationID == Globals.OrganisationID || o.ID == Globals.OrganisationID)
.OrderBy(o => o.OrganisationName)
.ToList()
.ToSelectList(org => org.OrganisationName, org => org.ID.ToString(), "-1", "None", true);
ありがとうございます!これはまさに私が望んでいたものです。 – Paul