4

私はASP.net MVCプロジェクトに取り組んでおり、CheckBoxForヘルパーメソッドを使用booleanしてモデルの a の値を次のように提供しています:

@Html.CheckBoxFor(m => m.ShouldSaveSearch, new { id="ShouldSaveSearch"})

ユーザーがチェックボックスをオンにすると、コントローラーがモデルを受け取ったときに完全に正常に機能します。ShouldSaveSearch プロパティは true に設定されます。

[HttpGet]
public ActionResult Search(int studentSearchId = -1)
{
    return View(new StudentSearchModel(studentSearchId));
}

[HttpPost]
public ActionResult Search(StudentSearchModel m)
{
    ViewBag.SearchResults = Hub.Web.Models.Student.StudentSearchModel.Search(m);
    Hub.Web.Models.Student.StudentSearchModel.Save(m);
    m.ShouldSaveSearch = false;
    m.ShouldShareSearch = false;
    m.SavedSearchName = "";
    m.SavedSearchDescription = "";

    return View(m);
}

ShouldSaveSearch次に、プロパティをに設定し、false最初に送信されたモデルと同じビューを返します。

ただし、ビューがレンダリングされるとき、このプロパティのチェックボックスはオンのままです。チェックボックス自体のチェックを外すのを妨げている何かが欠けていますか?

4

3 に答える 3

2

チェックボックスをデフォルトでオフにしたいようです。これは、ラムダの true/false 値にリンクされていませんが、checked 属性の値にリンクされています

@Html.CheckBoxFor(m => m.ShouldSaveSearch, new { @checked="false"})

相手の意見も同様に重要です。ModelState をクリアしてください!

于 2013-02-28T21:21:01.970 に答える
1

この質問ここでもModelState議論されている問題のように聞こえます

簡単に言うと、HtmlHelper はModelState値 notを表示しますModel。詳細については、質問を参照してください。

可能なオプション:

  • Forty-Two で提案されているリダイレクト取得後のパターンを実装する
  • ModelStateコレクションを使用してチェックボックスの値をリセットします。ModelState["ShouldSaveSearch"].Value = false
于 2013-02-28T21:20:26.917 に答える
1

ここでの問題は、モデル データを投稿したのと同じビューを返すと、MVC はエラーのために戻っていると判断することです。これは正常な動作です。ビューを再表示する場合は、PRG パターン (Post-Redirect-Get) を実装する必要があります。ModelState.IsValidtrue か false かに関係なく、問題は常に存在します。ビューの HttpGet バージョンにリダイレクトし、パラメーターを渡し、データをロードする必要があります。ロードを避けたい場合は、データをTempDataまたは他のセッション実装に保存します。

更新: モデル オブジェクトを受け取るアクションのバージョンを呼び出しています。データ呼び出しを永続化したら

return RedirectToAction("Search", new {studentSearchId = your_value});
于 2013-02-28T21:25:04.623 に答える