Из вашего комментария звучит так, как будто вы хотите установить выбранное значение на основе его позиции в списке ... Если вам нужно, то этот код, прежде чем передать его в пакет просмотра, будет работать.
Account account = new Account
{
Name = "khaled",
Email = "test",
AccountType = listItems[accountType].Text
};
listItems[accountType].Selected = true;//Add this line
ViewBag.items = listItems;
return View(account);
Однако это не очень хороший способ сделать что-то, что произойдет, если порядок изменится?Что произойдет, если int
, которое вы получите из строки запроса, будет больше, чем длина listItems
?
Более типичным методом является установка selected
на основе значения вашего SelectListItem
, что-тонапример:
public ActionResult Index(string accountType)//pass through the listitems value instead of its position in the list.
{
List<SelectListItem> listItems = new List<SelectListItem>
{
new SelectListItem{Text = "Competitor",Value = "Competitor"},
new SelectListItem{Text = "Consultant",Value = "Consultant"},
new SelectListItem{Text = "Customer",Value = "Customer"},
new SelectListItem{Text = "Investor",Value = "Investor"},
new SelectListItem{Text = "Partner",Value = "Partner"},
new SelectListItem{Text = "Influencer",Value = "Influencer"},
new SelectListItem{Text = "Press",Value = "Press"},
new SelectListItem{Text = "Prospect",Value = "Prospect"},
new SelectListItem{Text = "Reseller",Value = "Reseller"},
new SelectListItem{Text = "Supplier",Value = "Supplier"},
new SelectListItem{Text = "Vendor",Value = "Vendor"},
new SelectListItem{Text = "Other",Value = "Other"}
};
//loop through and check for a match
foreach (var item in listItems)
{
item.Selected = item.Value == accountType;
}
Account account = new Account
{
Name = "khaled",
Email = "test",
AccountType = listItems[accountType].Text
};
ViewBag.items = listItems;
return View(account);
}
Таким образом, если значение не соответствует вашей строке запроса, оно не вызовет исключение, и ваш метод все равно будет завершен.
Редактировать - только что заметил васвы используете @Html.DropDownListFor()
, измените его на @Html.DropDownList()
или просто html5 control, иначе атрибут Selected
игнорируется.
<div class="form-group">
@Html.Label("accounttype", "Account Type")
<select name="AccountType" class="form-control" disabled="disabled">
@foreach(var item in (List<SelectListItem>)ViewBag.items)
{
<option value='@item.Value' @(item.Selected ? "selected" : "")>@item.Text</option>
}
</select>
</div>