レコードを作成して保存できるページがあります。 [保存]をクリックすると、同じページにとどまりますが、そのページに更新されたビューモデルが表示されます。私が抱えている問題は、保存した後、GET
のパラメータがページURLにとどまることです。ページを再表示した後にURLパラメータを削除します
アプリケーションを実行すると、「リストレコード」ページに移動し、「新規作成」ボタンをクリックします。その結果、GET
の要求がEditRecord
になり、createNew
パラメータがtrue
に設定されます。私は、更新されたページが更新されたビューモデルで正しく表示されている。この方法にPOST
の
[HttpPost]
public ActionResult EditRecord(MyRecordViewModel viewModel)
{
// Save record to database
// ...
// Update the view model
viewModel.LastUpdatedDttm = DateTime.Now;
// Clear the model state dictionary so that my updated view model's values will be shown on the page
ModelState.Clear();
// Go back to the same page with an updated view model
return View(viewModel);
}
、それを保存]をクリックすると、要求はその後localhost/Home/EditRecord?createNew=True
public ActionResult EditRecord(string id, bool createNew = false)
{
MyRecordViewModel viewModel;
if (createNew)
{
viewModel = new MyRecordViewModel
{
IsNew = true
};
}
else
{
var myRecord = (from p in this.context.MyRecords
where p.Id = id
select p).FirstOrDefault();
if (myRecord == null)
{
this.ErrorMessage("Cannot find record.");
return View();
}
viewModel = new MyRecordViewModel(myRecord);
}
return View(viewModel);
}
のように見えます。問題は、URLがまだlocalhost/Home/EditRecord?createNew=True
であることです。私はそれが再表示するために、データベースへの不必要な旅行を引き起こしますので、私は、私のレコードIDで偽に等しいcreateNew
でGET
ページに戻ってリダイレクトするようにしたくないURLがlocalhost/Home/EditRecord
になりたいです同じレコード。
私はあなたが保存に成功した後、GETアクションにリダイレクトPRGパターンに従ってください示唆しています。あなたはPRGパターンをするときに何の問題がありますか? – Shyju
'GET'部分には、すでに利用可能なデータを選択するためのデータベースへの移動は含まれていませんか?私は不必要なデータベースアクセスを避けようとしています。 –
です。それはGETのデータベースから新鮮なものを読むためのきれいなアプローチかもしれません。なぜあなたは単一のデータベースヒットについて心配しますか? – Shyju