Еще один из этих вопросов относительно DropDownListFor
не выбирает значение "Выбранное".
Вот код:
Модель:
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
Кажется, что это связано с этой статьей . Чтобы обобщить решение этой статьи, мне нужно убедиться, что имя свойства (первый аргумент @html.DropDownList
) не соответствует всем существующим свойствам модели. Может ли кто-нибудь объяснить, почему это так?
Он отображает снимок правильно, когда я пишу в виде что-то вроде этого:
@Html.DropDownList("PermissionIdNotMatching", Model.Permissions)
Однако это не имеет никакого логического смысла, поскольку я действительно хочу, чтобы связующее могло соответствовать имени элемента select для свойства модели. В противном случае мне придется вручную захватить значение следующим образом: Request.Form["PermissionIdNotMatching"];
У кого-нибудь есть мысли?
Решение
См. принятый ответ и первый комментарий к нему.