ModelState jest niepoprawny, konwersja ze stringa na SelectListItem

0

Witam,

mam problem z listboxem. Otóż chcę na listboxie wyświetlić dane z bazy danych. Wyświetlają się bez problemu, ale podczas przesyłania postem danych ModelState.IsValid ma wartość false, przez co nie mogę dalej przetworzyć formularza. Poniżej kod:
The parameter conversion from type 'System.String' to type 'System.Web.WebPages.Html.SelectListItem' failed because no type converter can convert between these types.

    ApplicationDbContext db = new ApplicationDbContext();
    var CurrentAcademicYearId = db.Settings.FirstOrDefault(a => a.Key.Equals(ApplicationConstants.SETTINGS_CURRENT_ACADEMIC_YEAR)).Value;
    var groups = db.Groups.ToList().Where(a => a.AcademicYear.Id == CurrentAcademicYearId);
    object[] items = new object[groups.Count()];
    int index = 0;
    foreach (Group group in groups)
    {
        items[index++] = new
        {
            Id = group.Id,
            Name = group.Name
        };
    }

    MultiSelectList groupsListItems = new MultiSelectList(items, "id", "name");
@Html.ListBoxFor(model => model.SelectedGroups, groupsListItems, htmlAttributes: new { @class = "form-control", size = "5" })

Co może być źle?

0

Pokaż metode post i model.
Prześledź debugerem krok po kroku i sprawdź czy z metody post przechodzi ponownie do widoku i wtedy wyrzuca błąd. Jażeli tak problem nie jest z listboxem tylko z tym co ogólnie zwracasz z widoku do metody post, bo to sprawia, że IsValid zwraca false i ponownie jest wywoływany widok, tylko z metody post zamiast z get i nie jest przekazywana do widoku lista do listboxa stąd może być ten błąd, który widzisz. Ale jest on tylko objawem, a nie przyczyną problemu.

0

Walczyłem z tym na różne sposoby i w końcu działa normalnie. Naprawiłem przez zastąpienie powyższego kodu konstruktorem w klasie modelu, która przypisuje mi listę wszystkich grup do pola w modelu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1