我在完成POST操作後嘗試執行RedirectToAction時遇到NullReferenceException。這裏是什麼,我試圖總結:調用RedirectToAction後MVC模型爲null
申請後是POST'ed,如果應用程序是有效的我要爲後續重定向到另一個查看(和路線)客戶端流程。
[HttpPost]
public ActionResult SubmitApplication(Application application)
{
// Do stuff
if (!ModelState.IsValid)
{
return View(application);
}
// Create and set variables for the next route
return RedirectToAction("ApplicationReview", new
{
x = "foo",
y = "bob"
});
}
[HttpGet]
public ActionResult ApplicationReview(string x, string y)
{
// Do stuff using x and y as keys
return View();
}
在SubmitApplication查看我有類似下面的代碼,雖然它是更爲複雜。在RedirectToAction被稱爲模型對象SubmitApplication視圖爲空並引發異常。我可以理解爲什麼視圖作爲重定向過程的一部分返回,我只是無法弄清楚爲什麼模型爲null或者如何設置它。最終,目標行動從來沒有達到,可能是因爲重定向從未真正發生過。
@if (Model.HasSomething)
{
...
}
我在做什麼錯?有一個更好的方法嗎?
請注意,如果您使用TempData,並且用戶以某種方式刷新頁面(比如F5),那麼TempData項目將會消失。這就是爲什麼我發現TempData是MVC中最沒有價值的東西,絕不應該在非常罕見的情況下使用。非常罕見,我甚至不能想到使用它的理由,因爲這個問題不存在。 –
順便說一句,路由值會將值添加到querysring中(如果它們沒有在路由中定義),這樣它們將被綁定到被調用動作的參數列表。 –
@MystereMan:我認爲當你做一個Post-Redirect-Get並且需要發送一些數據到目標動作時,TempData很有用。 – Tuan