Şu anda DropDownListFor() nesnemin yerleştirilme biçiminden memnun değilim. IEnumerable'ı olabildiğince genel bir şekilde bulmaya çalışıyorum. Şimdiye kadar sahip olduğum şey bu.ASP.NET MVC 3 <T> IEnumerable için <selectListItem>
Yardımcısı:
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();
}
Denetleyici:
[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);
}
Görünüm:
denetleyicisi tekrarlanan kod ÇOK gibi görünüyor<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>
. Genel bir liste alır, Değer ve Metni bir Sözlük'e ekler ve sonra bunu, modelin bir parçası olarak göndermek üzere seçim listesini oluşturan bir yardımcı için girdi olarak kullanır.
Bunu başarmanın herhangi bir yolu daha var mı? Kontrolörümde şişirmekten nefret ediyorum ve bir formda birkaç düşüş olduğunda bu durum tam olarak ne olacağıyla ilgili.
sayesinde
DÜZENLEME - Kenneth'in yardımcı yöntemine sayesinde, artık birleştirdik denetleyici içinde bir çağrıda her şey:
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);
teşekkür ederiz! Tam olarak ne için umuyordum. – Paul