私のアプリケーションには2つの画面があります。最初のユーザーは、TempData
オブジェクトを使用して次のコントローラに渡される2つの値を選択します(Session
オブジェクトは使用できません)。ページの更新時にコントローラのモデルを取得する方法
次に、2番目のページのコントローラーで、これらの値を読み取り、それらを新しいモデルに割り当てます。これは、ユーザーがページを更新しない限り完全に機能します。この場合、TempData
の変数が失われ、モデルには値が含まれなくなります。
最初のコントローラのアクション(あなたが選択リストから2番目の項目を選択した場合)
[HttpPost]
public ActionResult Select(ProductSelector model)
{
if (!ModelState.IsValid)
{
ProductSelector newModel = InitialiseProductSelectorModel();
newModel.ProductId = model.ProductId;
newModel.StatusId = model.StatusId;
return View("ProductSelector", newModel);
}
TempData["StatusId"] = model.StatusId;
TempData["ProductId"] = model.ProductId;
return RedirectToAction("Create", "ProductDetails");
}
私の第二のコントローラのアクションは、次のようになります。
[HttpGet]
public ActionResult Create()
{
int ProductId, StatusId;
// Get ProductId and StatusId from product selector screen
int.TryParse(TempData["ProductId"].ToString(), out ProductId);
int.TryParse(TempData["StatusId"].ToString(), out StatusId);
model.ProductId = ProductId;
model.StatusId= StatusId;
return View("OrderCreate", model);
}
私はこれを回避するにはどうすればよいですか?私はモデルをパラメータとして取る別のアクションを持っていますが、これはPOST
メソッドです。
MVCパターンがどのように機能し、どのように情報がどのように渡されるかは完全に理解できません。まず、モデルバインディングについてもう少し詳しくお読みください。次に、TempDataを見てください(http://stackoverflow.com/questions/2642062/asp-net-mvc-does-browser-refresh-make-tempdata-useless) –
詳細を教えてください。あるコントローラーから別のコントローラーにデータを渡すことができる唯一の方法は、セッションまたはtempdataを使用するか、またはクエリー・ストリングで渡すことです。同じコントローラ内にあれば、 'return View()'を使用します。 – mikeyq6
いいえ、モデルバインディングでデータを渡します。これは情報を渡すMVCの方法で、ただ検索するだけです。 –