これをデバッグするために一日中費やしましたが、助けが必要です。ASP.Net MVC 4 で JQuery Mobile アプリケーションを開発しています。非表示フィールドがあり、モデル プロパティから派生した値を持つフォームがあります。
@<input type="hidden" id="hdnShowMsg" name="hdnShowMsg" value="@Model.ShowMsg" />
フォームの送信後、コントローラーによって Model.ShowMsg が変更され、フォームが再表示されます。問題は、ビューがその JavaScript (DOM が完全に読み込まれる) に到達するまでに、Model.ShowMsg は変更された値を表示せず、初期値 (投稿前) を表示することです。
これは私の状況をほぼ正確に説明する可能な解決策であることがわかりましたが、コントローラーの ModelState をクリアしても問題は解決しません: http://blogs.msdn.com/b/simonince/archive/2010/05/05/ asp-net-mvc-s-html-helpers-render-the-wrong-value.aspx
検証エラーが発生した場合に再表示できるように、modelstate がフォーム フィールドの値を保持する方法を理解しています。ビューの HTML ヘルパーは、モデルを使用する前にまず ModelState を使用することも理解しています。モデル状態をクリアしても問題が解決しないのはなぜですか?
コントローラーにブレークポイントを配置し、モデル状態がクリアされたことを確認しましたが、ポストバック後にビューが再表示されると、次の JavaScript コードは古い値を表示します。
<script>
$(document).ready(function () {
alert(document.getElementById("hdnShowMsg").value);
});
</script>
どうすればいいの?
フォームの html ヘルパーは次のとおりです。
@Using Html.BeginForm("Index", "NewDocument", Model, FormMethod.Post, New With {.id = "newdocument-form"})