Список флажков MVC - элементы неправильно отмечены после публикации - PullRequest
1 голос
/ 10 августа 2011

Меня раздражает то, что должно быть действительно простым представлением со списком элементов, включающих флажки.

@for (int i = 0; i < Model.ApiKeys.Count; i++)
        {
            <tr>
                <td>@Html.TextBoxFor(m => m.ApiKeys[i].Name, new { @class = "api-input-150" })</td>
                <td>@Html.CheckBoxFor(m => m.ApiKeys[i].Remove, new { @class = "api-input-50" })</td>
            </tr>    
        }

Когда форма отправляется, я удаляю все элементы, помеченные для удаления, а затем возвращаю представление с новым набором данных.

Что я вижу, так это то, что если список все еще содержит элемент с тем же индексом, что и одна из строк, которые были удалены в записи, флажок элемента установлен неправильно, даже если для свойства Remove установлено значение false ,

например. список из 3 элементов> удалить элемент 2> второй элемент в списке проверяется при отображении представления.

список из 3 элементов> удалить элемент 3> в результирующем виде элементы не отмечены

список из 4 элементов> удалить элементы 1 и 2> оба оставшихся элемента отмечены в результирующем представлении

Если я обновлю страницу, то она будет правильно отображаться, поэтому я временно обошел эту проблему, выполнив RedirectToAction, чтобы принудительно вызвать GET для представления вместо простого возврата представления из POST, но хотел бы знать, что происходит неправильно и как Я могу исправить это правильно.

Вот фактические фрагменты кода из двух действий:

public ActionResult Index()
{
    return View(GetSettings());
}

[HttpPost]
public ActionResult Index(Model.Setup settings)
{
    if (ModelState.IsValid)
    {
        SaveSettings(settings);
        return View(GetSettings());
    }
    else
    {
        return View(settings);
    }
}

Учитывая, что мои базовые данные все обновляются правильно, и это происходит только в ответе на POST, мне интересно, есть ли какая-то функция браузера в игре, которая кэширует проверенное состояние и переопределяет то, что фактически пытается выполнить мое представление оказывать ...

... или, может быть, есть настоящая простая ошибка, которую я упускаю из-за того, что слишком долго на нее смотрю!

1 Ответ

5 голосов
/ 10 августа 2011

Вам нужно удалить все свойства, которые вы изменяете внутри действия POST, из ModelState, иначе помощники HTML все равно будут использовать старые значения. Например:

if (ModelState.IsValid)
{
    ModelState.Clear();
    SaveSettings(settings);
    return View(GetSettings());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...