Я использую 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);
}
. . .
Мой MultiSelect берет список моделей FavouriteGenreViewModel для выбора опций в GenresList, он делает это с помощью AutoMapper в действии GET, но, очевидно, я не могу использовать AutoMapper в сообщении, потому что он забудет мои опубликованные значения.
Я думал об использовании строки идентификаторов с разделителями-запятыми вместо списка FavouriteGenreViewModel, таким образом, я могу повторно использовать значение, отправленное обратно... однако я надеюсь, что у кого-то есть более элегантный способ справиться с этой проблемой.
Спасибо!
Павел