Un'altra di queste domande relativa a DropDownListFor
non ha selezionato il valore "Selezionato" . Ecco il codice:DropDownListFor - non seleziona il valore "Selezionato"
Modello:
public class CreateEditAccountModel
{
[Required]
[Display(Name = "Permission")]
public int PermissionId { get; set; }
public IEnumerable<SelectListItem> Permissions { get; set; }
}
Controller:
[HttpGet]
[Authorize]
public ActionResult EditAccount(int id)
{
CreateEditAccountModel model = new CreateEditAccountModel();
model.Permissions = PermissionsAll();
return View("CreateEditAccount", model);
}
A questo punto se ho messo un punto di interruzione sulla linea di ritorno, il model.Permissions
contiene corretta IEnumerable<SelectListItem>
oggetto con più elementi e solo uno, che ha 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>
Per qualche motivo non v'è alcun attributo selezionato su una qualsiasi delle opzioni e prima opzione è selezionata.
Qualsiasi aiuto è apprezzato.
UPDATE
Sembra che abbia qualcosa a che fare con questo article. Per riassumere la soluzione di questo articolo, ho bisogno di assicurarmi che il nome della proprietà (primo argomento di @html.DropDownList
) non corrisponda a nessuna proprietà esistente del modello. Qualcuno può spiegare perché questo è il caso?
rende discesa correttamente quando scrivo nella vista qualcosa di simile:
@Html.DropDownList("PermissionIdNotMatching", Model.Permissions)
Tuttavia, non ha alcun senso logico per farlo dal momento che in realtà voglio legante per essere in grado di eguagliare il nome dell'elemento select alla proprietà del modello. Altrimenti dovrei prendere manualmente il valore in questo modo: Request.Form["PermissionIdNotMatching"];
Qualcuno ha qualche idea?
SOLUZIONE
See accettato risposta e il primo commento ad esso.
Il valore di PermissionId deve essere uguale a SelectListItem.Value per cui Selected = true. Prova model.PermissionId = Convert.ToInt32 (lst.First (t => t.Selected) .Value); Ho anche affrontato lo stesso problema come hai fatto, sorprendentemente il valore veniva selezionato durante la modifica, da lì ho capito che PermissionId dovrebbe avere lo stesso valore che è per il valore di SelectListItem selezionato. Ha funzionato per me – Brij