Невозможно удалить правый элемент списка в модели представления - PullRequest
2 голосов
/ 05 декабря 2011

Некоторая справочная информация: у меня есть форма для создания вопроса и возможных ответов. Класс Question содержит свойство, представляющее собой список ответов. Я создал модель представления для этой формы. У меня есть кнопка «Удалить выбранный ответ» в форме и выпадающий список, чтобы выбрать ответ для удаления. Я отправляю обратно модель представления формы в контроллер, и если пользователь нажал определенную кнопку, я удаляю этот ответ из Вопроса и возвращаю модель на страницу создания. Вот что я положил в действие контроллера:

if (questionForm.DeleteSelectedAnswerButton != null)
{
    questionForm.Question.PossibleAnswers.RemoveAt(questionForm.AnswerNoToDelete);
    questionForm.DeleteSelectedAnswerButton = null;
    questionForm.AnswerNoToDelete = 0;
    return View(questionForm);
}

Теперь я пытаюсь удалить ответ 2 из 4, а AnswerNoToDelete равен 1, поскольку, шагая по коду, я вижу, что questionForm.Question.PossibleAnswers - это список, в котором правильно пропущен второй ответ, но когда Я возвращаюсь к своему мнению, последний ответ - тот, который всегда отсутствует (судя по тексту в текстовых полях). Есть идеи, почему это может происходить? В моем представлении есть цикл for (от нуля до длины возможных ответов) для отображения текстового поля для каждого текста ответа.

Я делаю что-то в корне неправильно, создавая модель таким образом. Было бы лучше, если бы мои возможные ответы были на один уровень выше: questionForm.PossibleAnswers?

1 Ответ

1 голос
/ 05 декабря 2011

Попробуйте также удалить значение из состояния модели, поскольку HTML-помощники сначала будут использовать состояние модели при связывании, а после этого - значения модели вашего представления. И вы должны делать это для каждого значения, которое вы изменяете в своем действии:

if (questionForm.DeleteSelectedAnswerButton != null)
{
    ModelState.Remove("Question.PossibleAnswers[" + questionForm.AnswerNoToDelete + "]");
    questionForm.Question.PossibleAnswers.RemoveAt(questionForm.AnswerNoToDelete);

    ModelState.Remove("DeleteSelectedAnswerButton");
    questionForm.DeleteSelectedAnswerButton = null;

    ModelState.Remove("AnswerNoToDelete");
    questionForm.AnswerNoToDelete = 0;

    return View(questionForm);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...