2012-04-30 14 views
4

MVC3とカミソリを使用して非常に奇妙な問題に陥っています。生成されたビューでモデル値が正しくありません

私がまとめているアプリは一連のインタビューの質問を示しています。私は質問のためのビューを持っています(質問の内容はビューモデルから来ています)。だから私は1つの質問から返信した後、私は同じ質問画面を返すことが可能です(しかし、別のviewmodelインスタンスを使用しています)。

public long QuestionID { get; set; } 

私はビューに値を保存するために非表示の入力フィールドを使用しようとしていた:私はそうのような長い性質を持っているのviewmodelで

@Html.HiddenFor(m => m.QuestionID) 

私の問題があることです私は質問から質問に行くので、隠されたフィールドは最終的に生成されたhtmlでは変化しません。以後のすべての質問には、最初の質問IDの価値が残っています。他のすべてのコンテンツはうまく変化しており、うまく動作している他の隠しフィールドがいくつかあります。モデルが生成されたコントローラの正しい値を確認しました。私は、剃刀ファイルにブレークポイントを設定することができ、モデルが正しいQuestionIDであることがわかります。 @ Html.TextBoxForを使ってみましたが、同じ問題があります。私が手動で以下のような隠しフィールドを作成すると、それは正常に動作し、これは本当に私を悩ますものです。

<input type="hidden" id="QuestionID" name="QuestionID" value="@Model.QuestionID" /> 

これはどうして起こっているのですか?

+0

は、あなたのURLルーティングはquestionIDパラメータが含まれていますか?もしそうなら、それは新しい値に設定されていますか? – DMulligan

+0

AFinkelstein:いいえ – Adam

答えて

7

フォームポストの後、MVCは転記された値をModelStateに記録します。モデルの値を変更した場合でも、HiddenForヘルパーは最初にModelStateの値を使用します。これは、バインディングが失敗したか、またはバインディングが複雑なオブジェクトであり、ModelStateの文字列値が実際に入力されたものであるためです。あなたは本当にただ完全に新しいページとしてそれを扱いたい場合は、

ModelState.Remove("QuestionID"); 

かを使用することによってこの問題を解決することができます

ModelState.Clear(); 
+0

これは非常に興味深いです。問題とまったく同じように聞こえる。私は明日他のマシンで確認します。 – Adam

+0

それはありがとうそれを修正しました。私はまだ他のフィールドが問題なく変わったことが奇妙なことを発見しています... – Adam

関連する問題