Еще один из этих вопросов относительно DropDownListFor
не выбирает «Выбранные» значение. Вот код:DropDownListFor - не выбирает значение «Selected»
Модель:
public class CreateEditAccountModel
{
[Required]
[Display(Name = "Permission")]
public int PermissionId { get; set; }
public IEnumerable<SelectListItem> Permissions { get; set; }
}
Контроллер:
[HttpGet]
[Authorize]
public ActionResult EditAccount(int id)
{
CreateEditAccountModel model = new CreateEditAccountModel();
model.Permissions = PermissionsAll();
return View("CreateEditAccount", model);
}
На данный момент, если я поставил точку останова на возвратной линии, model.Permissions
содержит правильную IEnumerable<SelectListItem>
объекта с несколькими элементами и только один, который имеет Selected = true
.
Вид:
@using (Html.BeginForm())
{
@Html.DropDownListFor(m => m.PermissionId, Model.Permissions)
}
Визуализирует:
<select id="PermissionId" name="PermissionId">
<option value="">-- Select --</option>
<option value="1">Permission one</option>
<option value="2">Permission two</option>
</select>
По какой-то причине не выбран атрибут на любой из вариантов и первый вариант выбран.
Любая помощь приветствуется.
UPDATE
Оказывается, у него есть что-то делать с этим article. Чтобы обобщить решение этой статьи, мне нужно убедиться, что имя свойства (первый аргумент @html.DropDownList
) не соответствует любым существующим свойствам модели. Может ли кто-нибудь объяснить, почему это так?
Это делает выпадающий правильно, когда я пишу в вид что-то вроде этого:
@Html.DropDownList("PermissionIdNotMatching", Model.Permissions)
Однако это не делает никакого логического смысла делать это, так как я на самом деле хочу связующее, чтобы иметь возможность соответствовать имя элемента select для свойства модели. В противном случае мне придется вручную взять значение следующим образом: Request.Form["PermissionIdNotMatching"];
У кого-нибудь есть мысли?
РЕШЕНИЕ
См принял ответ и первый комментарий к ней.
Значение PermissionId должно быть равно SelectListItem.Value, для которого Selected = true. Попробуйте model.PermissionId = Convert.ToInt32 (lst.First (t => t.Selected) .Value); Я также столкнулся с такой же проблемой, как и вы, удивительно, что значение выбиралось при редактировании, откуда я понял, что PermissionId должен иметь то же значение, что и для выбранного значения SelectListItem. Работал для меня. – Brij