5

ここでMVC3とかみそりを使用して非常に奇妙な問題に遭遇しました。

私がまとめているアプリは、一連の面接の質問を示しています。質問に対するビューがあります(質問の内容はビューモデルからのものです)。したがって、1つの質問から投稿した後、同じ質問ビューを返す可能性があります(ただし、異なるviewmodelインスタンスを使用します)。

ビューモデルでは、次のような長いプロパティがあります。

public long QuestionID { get; set; }

ビューに値を格納するために非表示の入力フィールドを使用しようとしていました:

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

私の問題は、質問から質問へと進むときに、最終的に生成されたhtmlで非表示フィールドが変更されないことです。これ以降のすべての質問では、最初のquestionIDの値のままです。他のすべてのコンテンツは正常に変更されており、正常に機能している他の非表示フィールドがいくつかあります。モデルが生成されるコントローラーで正しい値を確認しました。かみそりファイルにブレークポイントを設定すると、モデルが正しいQuestionIDであるはずであることがわかります。@ Html.TextBoxForも使用してみましたが、同じ問題が発生します。以下のような非表示のフィールドを手動で作成すると、正常に機能します。これが本当に気になるところです。

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

なぜこれが起こっているのか考えていますか?

4

1 に答える 1

8

フォームの投稿後、MVCはに投稿された値を追跡しますModelState。モデルの値を変更した場合でも、HiddenForヘルパーはModelState最初にその値を使用します。これは、バインディングが失敗したか、バインディングが複雑なオブジェクトであり、の文字列値がModelState実際に入力されたものである可能性があるためです。

これを使用して解決できます

ModelState.Remove("QuestionID");

または、本当に完全に新しいページとして扱いたい場合は、

ModelState.Clear();
于 2012-04-30T23:21:02.290 に答える