5

MVC と ASP.NET は初めてです。私の要件は、ビューに 2 つのレコードを初めて表示する必要があり、ViewContains に 1 つの「SWAP」ボタンが含まれていることです。このボタンを押すと、コントローラーのポスト アクションが実行され、元のビューモデルを取得する必要があり、2 つのレコードを交換して同じビューをレンダリングする必要があります。このプロセスは、スワップ ボタンを押すたびに続行する必要があります。

初めて SWAP をクリックしたときは、問題なく動作しています。しかし、次回クリックすると、ポストコントローラーアクションは元のレコードを取得して同じものを表示します。

以下に示すように、私のコントローラーコード。

public ActionResult Dedupe()
        {
            var selectedClients = TempData["SelectedClients"] as DedupeClientsViewModel;
            return this.View(selectedClients);
        }

        [HttpPost]
        public ActionResult Dedupe(DedupeClientsViewModel dedupeClients)
        {
            if (ModelState.IsValid)
            {
                //my functionality
            }
            return this.View(dedupeClients);
        }

ビューから新しいデータを取得するために「ModelState」で行う必要があることはありますか。

4

1 に答える 1

6

投稿から同じモデルを返すため、ASP.Net MVCは、ユーザーに提示したいエラーがあると想定しています(したがって、元の値が保持されます)。これを修正するには、モデル全体のモデル状態をクリアするか、1つ以上のフィールドのモデル状態をクリアします。下記参照。もちろん、これはコントローラーで行われます。

ModelState.Clear(); //clear entire model state
ModelState.Remove("MyObject.MyProperty"); //clear only one property

Rick Strahlは、彼のブログでこの問題について適切に説明しています:ASPNET-MVC-Postbacks-and-HtmlHelper-Controls-ignoring-Model-Changes

于 2012-12-28T18:03:26.183 に答える