Otra de estas preguntas con respecto a DropDownListFor
no seleccionando el valor "Seleccionado". Aquí está el código:DropDownListFor - no selecciona el valor "Seleccionado"
Modelo:
public class CreateEditAccountModel
{
[Required]
[Display(Name = "Permission")]
public int PermissionId { get; set; }
public IEnumerable<SelectListItem> Permissions { get; set; }
}
controlador:
[HttpGet]
[Authorize]
public ActionResult EditAccount(int id)
{
CreateEditAccountModel model = new CreateEditAccountModel();
model.Permissions = PermissionsAll();
return View("CreateEditAccount", model);
}
En este punto, si pongo un punto de ruptura en la línea de retorno, el model.Permissions
contiene apropiada IEnumerable<SelectListItem>
objeto con varios elementos y solo uno, que tiene Selected = true
.
Vista:
@using (Html.BeginForm())
{
@Html.DropDownListFor(m => m.PermissionId, Model.Permissions)
}
Renders:
<select id="PermissionId" name="PermissionId">
<option value="">-- Select --</option>
<option value="1">Permission one</option>
<option value="2">Permission two</option>
</select>
Por alguna razón no hay ningún atributo seleccionado en cualquiera de las opciones y primera opción está seleccionada.
Cualquier ayuda es apreciada.
ACTUALIZACIÓN
Parece que tiene algo que ver con esto article. Para resumir la solución de este artículo, necesito asegurarme de que el nombre de la propiedad (primer argumento de @html.DropDownList
) no coincide con con ninguna de las propiedades existentes del modelo. ¿Alguien puede explicar por qué este es el caso?
que presta desplegables correctamente cuando escribo en la vista algo como esto:
@Html.DropDownList("PermissionIdNotMatching", Model.Permissions)
Sin embargo, esto no tiene ningún sentido lógico para hacerlo ya que en realidad quiero ligante sea capaz de igualar el nombre del elemento seleccionado a la propiedad del modelo. De lo contrario, tendría que tomar manualmente el valor de esta manera: Request.Form["PermissionIdNotMatching"];
¿Alguien tiene alguna idea?
SOLUCIÓN
Ver aceptadas respuesta y el primer comentario a la misma.
El valor de PermissionId debe ser igual a SelectListItem.Value para el que Selected = true. Pruebe model.PermissionId = Convert.ToInt32 (lst.First (t => t.Selected) .Value); También enfrenté el mismo problema que tú, sorprendentemente se seleccionó el valor al editar, a partir de ahí calculé que PermissionId debería tener el mismo valor que para el valor de SelectListItem seleccionado. Trabajó para mi. – Brij