MVC ModelState Удалить ключи при удалении элемента в модели списка - PullRequest
0 голосов
/ 26 апреля 2018

В представлении MVC, когда пользователь удаляет элемент в списке (например, используя шаблон редактирования), может быть использовано соответствующее действие для удаления этого элемента из модели представления. Тем не менее, элемент все еще может отображаться в перерисованном представлении. Даже если представление содержит на один элемент меньше, возможно, из отображаемых элементов был удален неправильный элемент.

Поскольку ModelState является первым выбором [перед моделью (представлением)] для отображения данных в представлении, его также необходимо отредактировать для удаления удаленного элемента.

Каков наилучший способ управления этим сценарием?

1 Ответ

0 голосов
/ 26 апреля 2018

Я могу удалить все записи для списка, если знаю, какое начальное имя

, например

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...