/ / MVC .NET razor DropDownList - asp.net-mvc, razor, html-select

Brzytwa MVC .NET DropDownList - asp.net-mvc, brzytwa, html-select

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 № 1

Spró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ść.