【发布时间】:2010-01-17 14:36:16
【问题描述】:
我在我的 asp.net mvc 应用程序上使用 DataAnnotations 进行错误检查,我也在使用强类型 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 中的选项,它在 GET 操作中使用 AutoMapper 执行此操作,但显然我不能在帖子上使用 AutoMapper,因为它会忘记我发布的值。
我考虑过使用逗号分隔的 ID 字符串而不是 FavouriteGenreViewModel 列表,这样我就可以重新使用回传的值...但是我希望有人有更优雅的方式来处理这个问题。
谢谢!
保罗
【问题讨论】:
标签: asp.net-mvc listbox viewmodel data-annotations multi-select