#c# #.net #razor
#c# #.net #razor
Вопрос:
У меня есть страница razor. При загрузке он проходит через приведенную ниже функцию и создает список SelectListItem:
List<SelectListItem> groups = new List<SelectListItem>();
for (int i = 0; i < Model.List.key.Count(); i )
{
bool selected = false;
if(Model.List.key[i] == Model.rkey)
{
selected = true;
}
groups.Add(new SelectListItem
{
Text = Model.List.description[i],
Value = Model.List.key[i].ToString(),
Selected = selected
});
}
При совпадении ключей выбранное значение правильно устанавливается равным true, однако выбранное значение не отображается:
@Html.DropDownListFor(model => Model.groupTypeList, groups, new { @class = "form-control", onchange = "chosenGroup(this.value)", id = "groupTypeList" })
Приведенный выше ddl показывает все добавленные значения, но не устанавливается выбранное значение. Я попробовал ниже, но затем он дважды отображает выбранное значение:
@Html.DropDownListFor(model => Model.groupTypeList, groups, groups.First(x => x.Selected == true).Text, new { @class = "form-control", onchange = "chosenGroup(this.value)", id = "groupTypeList" })
Комментарии:
1. Можете ли вы показать код модели?
Ответ №1:
Вы можете попробовать это:
Модель:
public class Group
{
public IEnumerable<Key> List { get; set; }
public int rkey { get; set; }
}
public class Key
{
public int key { get; set; }
public string desc { get; set; }
}
Контроллер действий:
public ActionResult Index()
{
Group g = new Group
{
List = new List<Key>()
{
new Key { key = 1, desc = "Test" } ,
new Key { key = 2, desc = "Test2" },
new Key { key = 3, desc = "Test3" },
new Key { key = 4, desc = "Test4" },
new Key { key = 5, desc = "Test5" }
}
};
g.rkey = 4;
return View(g);
}
Вид:
@model WebMVC.Models.Group
<div>
@{
List<SelectListItem> groups = new List<SelectListItem>();
for (int i = 0; i < Model.List.Count(); i )
{
bool selected = false;
if (Model.List.ElementAt(i).key == Model.rkey)
{
selected = true;
}
groups.Add(new SelectListItem { Text = Model.List.ElementAt(i).desc, Value = Model.List.ElementAt(i).key.ToString(), Selected = selected });
}
}
<label>Select option:</label>
@Html.DropDownList("MyDropDownList", groups, null, new { @class = "form-control", onchange = "chosenGroup(this.value)", id = "groupTypeList" })
</div>
Другой способ — использовать DropdownListFor
напрямую, без проверки razor в представлении:
@Html.DropDownListFor(x => x.rkey, new SelectList(Model.List, "key", "desc"), null, new { @class = "form-control", onchange = "chosenGroup(this.value)", id = "groupTypeList" })