在MVC视图中,当用户删除列表中的项目时(例如,使用编辑模板),可以使用关联的动作从视图模型中移除该项目。但是,该项目仍可能在重新渲染的视图中显示。即使视图中包含的项目少一个,也可能已从显示的项目中删除了错误的项目。
因为ModelState是[视图]模型之前的第一个选择,用于在视图中显示数据,所以还必须编辑它以删除已删除的项目。
管理此方案的最佳方法是什么?
答案 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);
}
}