Sto lavorando a un'applicazione Web MVC3. Voglio un elenco di categorie mostrato quando si modifica un blo dal sistema di gestione delle applicazioni. Nel mio viewmodel ho definito la seguente proprietà per un elenco di selectlistitems per le categorie.C# mvc 3 utilizzando la selezione con il valore selezionato in vista
Il passaggio successivo, il mio controller contiene la seguente azione di modifica in cui l'elenco di selectlistitems viene compilato dal database.
public ActionResult Edit(Guid id)
{
var blogToEdit = _blogService.First(x => x.Id.Equals(id));
var listOfCategories = _categorieService.GetAll();
var selectList = listOfCategories.Select(x =>new SelectListItem{Text = x.Name, Value = x.Id.ToString(), Selected = x.Id.Equals(blogToEdit.Category.Id)}).ToList();
selectList.Insert(0, new SelectListItem{Text = Messages.SelectAnItem, Value = Messages.SelectAnItem});
var viewModel = new BlogModel
{
BlogId = blogToEdit.Id,
Active = blogToEdit.Actief,
Content = blogToEdit.Text,
Title = blogToEdit.Titel,
Categories = selectList //at this point i see the expected item being selected
//Categories = new IEnumerable<SelectListItem>(listOfCategories, "Id", "Naam", blogToEdit.CategorieId)
};
return View(viewModel);
}
quando ho creato un punto di interruzione poco prima della visualizzazione viene restituito, vedo che il SelectList è pieno come mi aspettavo. Quindi a questo punto tutto sembra essere a posto. Il viewmodel è completamente riempito. Poi a mio avviso (sto usando Razor) ho le seguenti due regole che dovrebbero rappresentare la selectlist per me.
@Html.LabelFor(m => m.Categories) @Html.DropDownListFor(model=>model.Categories, Model.Categories, Model.CategoryId)
@Html.ValidationMessageFor(m => m.Categories)
Quando eseguo il codice e apro la vista per modificare il mio blog, posso vedere tutti i dati corretti. Anche l'elenco di selezione viene reso correttamente, ma l'elemento che voglio essere selezionato ha perso la sua selezione. Come può essere? Fino al momento in cui il viewmodel viene restituito con la vista, tutto va bene. Ma quando guardo la pagina web nel browser, la selectlist è lì solo con la selezione corretta. Cosa mi manca qui? O stai sbagliando?
Piuttosto sicuro che hai ragione, tuttavia, la proprietà dovrebbe essere denominata CategoryId, non SelectedValue (lo so, un po 'di nitpick, +1 in ogni caso :)) –
Grazie per la risposta rapida e molto chiara! Ha funzionato alla grande! – Rob
@Chris Shaffer, sì sono d'accordo sul fatto che sarebbe meglio chiamare 'CategoryId' invece di' SelectedValue' in quanto riflette meglio il suo scopo. –