Nie mogę połączyć listy rozwijanej z moim modelem wwidok. Mam komunikat o błędzie: Element ViewData, który ma klucz "title" jest typu "System.String", ale musi być typu "IEnumerable z następującym kodem:
public class FareCustomer
{
[Required]
public int title { get; set; }
Mój kontroler:
List<SelectListItem> titleList = new List<SelectListItem>();
titleList.Add(new SelectListItem { Text = "Non renseigné", Value = "0" });
titleList.Add(new SelectListItem { Text = "Monsieur", Value = "1" });
titleList.Add(new SelectListItem { Text = "Madame", Value = "2" });
titleList.Add(new SelectListItem { Text = "Mademoiselle", Value = "3" });
ViewBag.title = titleList;
//Create a new customer
FareCustomer fareCustomer = new FareCustomer();
fareCustomer.title = 1;
return View("CreateAccount", fareCustomer);
Mój widok "CreateAccount"
@model PocFareWebNet.Models.FareCustomer
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
@Html.DropDownList("title")
<input type="submit" value="Save" />
</fieldset>
}
Próbowałem zastosować to, co jest tutaj opisane: Korzystanie z Pomocnika DropDownList w środowisku ASP.NET MVC ale oczywiście coś przeoczyłem.
Odpowiedzi:
2 dla odpowiedzi № 1Spróbuj rzucić na IEnumarable i użyj pomocnika opartego na modelu
@Html.DropDownListFor(m => m.title,((IEnumerable<SelectListItem>)ViewBag.title))
2 dla odpowiedzi nr 2
Znalazłem mój problem. Użyłem widoku wygenerowanego przez Visual Studio i już definiuje ViewBag.Title
@model PocFareWebNet.Models.FareCustomer
@{
ViewBag.Title = "CreateAccount";
}
Właśnie dlatego błąd mówi, że typ jest ciągiem i nie można go przekonwertować na IEnumerable.
Wydaje się, że w maszynce do golenia nie jest rozróżniana wielkość liter: kontroler ustawia plik ViewBag.title, ale zestaw widoku ViewBag.Title i zastępuje ViewBag.title pochodzący z kontrolera.
Dziękuję za pomoc.
1 dla odpowiedzi nr 3
Spróbuj zamiast tego:
@Html.DropDownListFor(model => model.title, (SelectList)ViewBag.title)
Pierwszy argument będzie odbierać wybraną wartość.