维护MVC中列表框的状态

时间:2012-09-16 05:16:22

标签: asp.net-mvc asp.net-mvc-3

我在 MVC 中有双列表框。需要在服务器上发布所选列表框中所有项目的ID。模型有三个属性定义

IEnumerable<SelectListItem> AvailItems {get;set;}
IEnumerable<SelectListItem> SelectedItems {get;set;}
string SelectedItemIds {get;set;} 

我已将availItemsselectedItems列表框填充为不同的名称,SelectedItemIds属性为hiddenfield。如果用户在列表框中添加/删除项目,Javascript将更新隐藏字段。在httpost中,我只收到selectedItemIds,因为列表框的名称已更改,这是预期的行为。

问题是当模型无效或发生任何异常时,返回View(model)执行,列表框填充空值,但hiddenfield包含已修改项的值。当用户再次提交页面时,hiddenfield的值将被发布,但显示的项目将来自db。我遵循这种方法使用hiddenfield而不是在提交之前选择所有项目(使用javascript),因为如果非js用户提交页面,它不会有害。来自hiddenfield的值会被接收。

有关如何处理上述情况的任何想法?

1 个答案:

答案 0 :(得分:1)

在执行View(model)之前,为什么不将这些信息重新填充到模型中?我假设您的代码类似于:

if (ModelState.IsValid) 
{
    //...all is ok
}
else 
{
    model.AvailItems = // repopulate
    model.SelectedItems = // repopulate
    return View(model);
}