2011-12-04 10 views
2

背景情報:質問を作成するためのフォームとその回答があります。 Questionクラスには、回答のリストであるプロパティが含まれています。このフォームのビューモデルを作成しました。フォーム上に「選択された回答を削除」ボタンがあり、削除する回答を選択するドロップダウンリストがあります。フォームビューモデルをコントロールにポストバックします。ユーザーが特定のボタンを押した場合は、質問からこの回答を削除し、モデルを作成ページに返します。これは私がのcon​​trolerアクションの内側に置くものです:私はquestionForm.Questionことを確認コードをステップとしてビューモデル内のリストの正しい要素を削除できません

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

さて、私は4の外に答え2を削除しようと、AnswerNoToDeleteは、1に等しいです。 PossibleAnswersは2番目の答えが正しくないリストですが、私の見解に戻ると、最後の答えは常に欠落しています(テキストボックスにあるテキストから判断して)。これがなぜ起こっているのでしょうか?私のビューには、各応答テキストのテキストボックスを描画するためのforループ(可能な回答の長さより0から短い)があります。

このようにモデルを構築することで、私は根本的に何かをやっていますか?可能な回答が1つ上のレベルだった場合、それは良いでしょうか:questionForm.PossibleAnswers?

答えて

1

htmlヘルパーは、バインド時にhtmlヘルパーが最初にmodelstateを使用し、その後にビューモデル値を使用するため、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); 
} 
+0

これは私の問題を解決します。実際には、Answerクラスにはかなりのプロパティがありますので、 'ModelState'からもっと多くのエントリを削除する必要があります。私は 'ModelState.Clear()'を実行しました。私はバリデーションエラーを取り除いたので、一つの石で2羽の鳥を殺しました。ユーザーが「保存」ボタンを押してモデルが有効でない場合にのみ、エラーを表示したい。正しい方向を指してくれてありがとう。 – Panos

+0

ありがとう、テンプレートベースのコレクションエディタを作成していて、コレクションの途中から値を削除しようとすると奇妙なエラーが発生しました。これで解決しました。 ...ああ、ところで、ありがとう。 –

関連する問題