[解決済み] Asp.net MVC ModelState.Clear
質問
どなたか、Asp.net MVCにおけるModelStateの役割の簡潔な定義(または1つへのリンク)を教えていただけませんか? 特に私はそれが必要であるか、または望ましいのはどのような状況で呼び出されるかを知る必要があります
ModelState.Clear()
.
少しオープンエンドですね。 ...すみません、私が実際にやっていることをお話しすれば、お役に立てるかもしれませんね。
私は、"Page"というコントローラでEditのアクションを持っています。 最初にページの詳細を変更するためのフォームを見たとき、すべてがうまくロードされました("MyCmsPage"オブジェクトへのバインディング)。 次に、MyCmsPage オブジェクトのフィールドのひとつに値を生成するボタンをクリックします (
MyCmsPage.SeoTitle
). それはうまく生成され、オブジェクトを更新します。そして私は、新しく変更されたページオブジェクトでアクションの結果を返し、関連するテキストボックス(
<%= Html.TextBox("seoTitle", page.SeoTitle)%>
を使用してレンダリングされます)が更新されることを期待します...しかし、残念ながら、ロードされた古いモデルからの値を表示します。
私はこの問題を回避するために
ModelState.Clear()
を使って回避しましたが、やみくもにやっているのではなく、なぜ/どのようにうまくいったのかを知る必要があります。
PageControllerです。
[AcceptVerbs("POST")]
public ActionResult Edit(MyCmsPage page, string submitButton)
{
// add the seoTitle to the current page object
page.GenerateSeoTitle();
// why must I do this?
ModelState.Clear();
// return the modified page object
return View(page);
}
Aspx:
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MyCmsPage>" %>
....
<div class="c">
<label for="seoTitle">
Seo Title</label>
<%= Html.TextBox("seoTitle", page.SeoTitle)%>
<input type="submit" value="Generate Seo Title" name="submitButton" />
</div>
どのように解決するのですか?
私は、MVCのバグだと思います。 今日、何時間もこの問題と格闘しました。
これを考えると
public ViewResult SomeAction(SomeModel model)
{
model.SomeString = "some value";
return View(model);
}
ビューは元のモデルでレンダリングされ、変更は無視されます。 そこで、同じモデルを使うのが嫌なのかもしれないと思い、以下のようにしてみました。
public ViewResult SomeAction(SomeModel model)
{
var newModel = new SomeModel { SomeString = "some value" };
return View(newModel);
}
そして、まだビューはオリジナルのモデルでレンダリングされます。 奇妙なのは、ビューにブレークポイントを置いてモデルを調べると、変更された値を持っていることです。 しかし、応答ストリームは古い値を持っています。
最終的に、私はあなたが行ったのと同じワークアラウンドを発見しました。
public ViewResult SomeAction(SomeModel model)
{
var newModel = new SomeModel { SomeString = "some value" };
ModelState.Clear();
return View(newModel);
}
期待通りに動作する。
これは "feature," ではありませんよね?
関連
-
[解決済み] ファイルアップロード ASP.NET MVC 3.0
-
[解決済み] ASP.NET MVC Frameworkで複数のサブミットボタンを処理する方法は?
-
[解決済み] ASP.NET MVCでenumからドロップダウンリストを作成するにはどうすればよいですか?
-
[解決済み] ASP.NET MVC - カスタムIIdentityまたはIPrincipalの設定
-
[解決済み] ASP.NET MVCでビューをコンパイルする
-
[解決済み] ELMAHをASP.NET MVCの[HandleError]属性で動作させる方法は?
-
[解決済み] ASP.Net MVCのmodelStateからすべてのエラーを取得する方法は?
-
[解決済み] ASP.NET MVCのビューを文字列としてレンダリングする方法は?
-
[解決済み] [Solved] ASP.NET MVCで404を適切に処理するには?
-
[解決済み] ASP.Net MVC デフォルトの HTTP ヘッダーを削除する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】VS 2015でコントローラからビューを追加できない : "選択されたコードジェネレータの実行にエラーが発生しました"
-
[解決済み] HTTPヘッダを送信した後、サーバーがステータスを設定できない IIS7.5
-
[解決済み] asp.net MVCの@RenderSectionとは?
-
[解決済み] Entity Framework Code Firstを使用して一意制約を設定することは可能ですか?
-
[解決済み】ASP.NET MVC 3 razor ViewStart ファイルで異なるレイアウトを指定するには?
-
[解決済み】認証や認可に失敗した場合、AuthorizeAttributeがログインページにリダイレクトされるのはなぜですか?
-
[解決済み】MVCアプリケーションでデータをキャッシュする方法
-
[解決済み】ASP.NET MVC Html.ValidationSummary(true) でモデルエラーが表示されない。
-
[解決済み] ASP.Net MVC デフォルトの HTTP ヘッダーを削除する方法は?
-
[解決済み] ASP.NET MVCのモデルでUrlHelperを呼び出す