0

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

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

我已经填充了具有不同名称availItems和属性的selectedItems列表框SelectedItemIds作为隐藏字段。如果用户从列表框中添加/删除项目,Javascript 会更新隐藏字段。在 httpost 中,我收到只是selectedItemIds因为列表框的名称已更改,这是预期的行为。

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

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

4

1 回答 1

1

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

if (ModelState.IsValid) 
{
    //...all is ok
}
else 
{
    model.AvailItems = // repopulate
    model.SelectedItems = // repopulate
    return View(model);
}
于 2012-09-16T06:40:07.107 回答