【问题标题】:MVC ModelState Remove keys when deleting item in a list modelMVC ModelState 删除列表模型中的项目时删除键
【发布时间】:2018-10-07 00:59:57
【问题描述】:

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

因为 ModelState 是在视图中显示数据的首选[在(视图)模型之前],因此还必须对其进行编辑以删除已删除的项。

管理这种情况的最佳方法是什么?

【问题讨论】:

    标签: list model-view-controller modelstate


    【解决方案1】:

    如果我知道起始名称,我可以删除列表的所有条目

    例如

    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);
        }
    }
    

    【讨论】:

    • 对我来说,如果我使用 k.EndsWith 效果会更好
    猜你喜欢
    • 1970-01-01
    • 2015-10-01
    • 1970-01-01
    • 2022-12-20
    • 1970-01-01
    • 2013-01-17
    • 2016-06-19
    • 1970-01-01
    • 2015-11-24
    相关资源
    最近更新 更多