MVC ModelState删除列表模型中的项目时删除键

时间:2018-04-26 10:50:07

标签: list model-view-controller modelstate

在MVC视图中,当用户删除列表中的项目时(例如,使用编辑模板),可以使用关联的动作从视图模型中移除该项目。但是,该项目仍可能在重新渲染的视图中显示。即使视图中包含的项目少一个,也可能已从显示的项目中删除了错误的项目。

因为ModelState是[视图]模型之前的第一个选择,用于在视图中显示数据,所以还必须编辑它以删除已删除的项目。

管理此方案的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

如果我知道起始名称

,我可以删除列表的所有条目

e.g。

MyItems[0].Id
MyItems[0].Name
MyItems[1].Id
MyItems[1].Name

静态助手可以按如下方式使用

ModelState.Remove_StartsWith("MyItems"); 

虽然这也会删除任何有错误的项目。由于ModelState键具有特定形式:name [n] .name - 仅删除与模型项匹配的项,不仅需要在ModelState中查找该项,还需要管理ModelState键的索引号 - 可能创建新的ModelState使用连续顺序的更新密钥列表

/// <summary>
/// Remove all entries where a key starts with a given value
/// This will remove list entries
/// </summary>
/// <param name="dic"></param>
/// <param name="startsWith"></param>
static public void Remove_StartsWith(this ModelStateDictionary dic, string startsWith)
{
    foreach (string key in dic.Keys.Where(k => k.StartsWith(startsWith)).ToList())
    {
        dic.Remove(key);
    }
}