Я использую DataAnnotations для проверки ошибок в своем приложении asp.net mvc, я также использую строго типизированные ViewModels.
Моя проверка ошибок работает нормально и отправляет обратно в мой обзор сообщения об ошибках, если поле пустое. Однако в моей форме есть MultiSelect / Listbox, и мне нужно запомнить его состояние после ошибки.
На данный момент моя ViewModel выглядит следующим образом (я только включил соответствующие свойства):
public class ProfilePageViewModel : PageViewModel
{
public IList<FavouriteGenreViewModel> FavGenres { get; set; }
[Required(ErrorMessage = "*")]
public string SelectedGenres { get; set; }
public IDictionary<int, string> GenresList { get; set; }
}
Это мое действие в моем контроллере:
public ActionResult Profile(ProfilePageViewModel viewModel)
{
if(!ModelState.IsValid)
{
viewModel.CountriesList = dropDownTasks.GetCountries();
viewModel.GendersList = dropDownTasks.GetGenders();
viewModel.GenresList = dropDownTasks.GetGenres();
viewModel.TimezonesList = dropDownTasks.GetTimezones();
viewModel.FavGenres =
return View(viewModel);
}
. . .
My MultiSelect берет список FavouriteGenreViewModel для выбора параметров в GenresList, он делает это с помощью AutoMapper в действии GET, но, очевидно, я не могу использовать AutoMapper на посте, потому что он забудет мои опубликованные значения.
Я думал об использовании строки идентификаторов, разделенных запятыми, вместо списка FavouriteGenreViewModel, чтобы я мог повторно использовать это значение после публикации ... однако я надеюсь, что у кого-то есть более элегантный способ справиться с этим проблема.
Спасибо!
Пол