У меня есть таблица, в которой значение True / False хранится в виде битового поля sqlserver (Featured
).Во-первых, есть ли лучший способ создать выпадающий список для этого, кроме как вручную?
Во-вторых, вот то, что у меня есть, которое работает, но не добавляет selected="selected"
ни к каким элементам в DDL.
Редактировать 1: Я обновил этот пример в соответствии с предложенным ответом, и он приводит к ошибке во время выполнения :( Редактировать 2: Использование его какфункция работает (с и без приведения), но selected = «selected» по-прежнему не добавляется.
Модель:
//
// View models
public class SpotlightFormViewModel
{
// props
public Spotlight Spotlight { get; private set; }
public SelectList FeaturedMenu { get; private set; }
static IDictionary<string, int> feature = new Dictionary<string, int>(){
{"True", 1},
{"False", 0},
};
public IEnumerable<SelectListItem> FeaturedChoices(Spotlight spotlight)
{
return feature.Select(f => new SelectListItem
{
Text = f.Key,
Value = f.Value.ToString(),
Selected = spotlight.Featured,
});
}
// constr
public SpotlightFormViewModel(Spotlight spotlight)
{
Spotlight = spotlight;
FeaturedMenu = new SelectList(FeaturedChoices(spotlight));
}
}
Контроллер:
public ActionResult Edit(int id)
{
Spotlight spotlight = spotlightRepository.GetSpotlight(id);
return View(new SpotlightFormViewModel(spotlight));
}
Просмотр:
<div class="editor-label">
<%: Html.LabelFor(model => model.Spotlight.Featured) %>
</div>
<div class="editor-field">
<%: Html.DropDownListFor(model => model.FeaturedMenu, Model.FeaturedChoices(Model.Spotlight))%>
<%: Html.ValidationMessageFor(model => model.Spotlight.Featured) %>
</div>