一些背景信息:我有一个用于创建问题的表单及其可能的答案。 Question类包含一个属性,它是一个答案列表。我为这个表单创建了一个视图模型。我在表单上有一个“删除选定的答案”按钮,并在下拉列表中选择要删除的答案。我将表单视图模型发布回控制器,如果用户按下特定按钮,我将从问题中删除此答案并将模型返回到创建页面。这就是我在控制器操作中的内容:
if (questionForm.DeleteSelectedAnswerButton != null)
{
questionForm.Question.PossibleAnswers.RemoveAt(questionForm.AnswerNoToDelete);
questionForm.DeleteSelectedAnswerButton = null;
questionForm.AnswerNoToDelete = 0;
return View(questionForm);
}
现在,我尝试删除4中的答案2,AnswerNoToDelete等于1,当我单步执行代码时,我看到questionForm.Question.PossibleAnswers是一个正确缺少第二个答案的列表,但是当我回到我的观点,最后一个答案是总是丢失的答案(从文本框中的文字判断)。任何想法为什么会这样?我的视图有一个for循环(从零到小于可能答案的长度)为每个答案文本呈现一个文本框。
通过这种方式构建模型,我做了一些根本错误的事情。如果我可能的答案是一个级别会更好:questionForm.PossibleAnswers?
答案 0 :(得分:1)
尝试从模型状态中删除值,因为html帮助器在绑定时将首先使用modelstate,之后将使用视图模型值。您必须为您在操作中修改的每个值执行此操作:
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);
}