2012-05-04 82 views
1

我在完成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) 
{ 
    ... 
} 

我在做什麼錯?有一個更好的方法嗎?

回答

2

RedirectToAction中的第二個參數不是用於模型,而是用於routeValues。

爲了使重定向結果暫時保持狀態,您需要將數據存儲在TempData中。

+1

請注意,如果您使用TempData,並且用戶以某種方式刷新頁面(比如F5),那麼TempData項目將會消失。這就是爲什麼我發現TempData是MVC中最沒有價值的東西,絕不應該在非常罕見的情況下使用。非常罕見,我甚至不能想到使用它的理由,因爲這個問題不存在。 –

+0

順便說一句,路由值會將值添加到querysring中(如果它們沒有在路由中定義),這樣它們將被綁定到被調用動作的參數列表。 –

+0

@MystereMan:我認爲當你做一個Post-Redirect-Get並且需要發送一些數據到目標動作時,TempData很有用。 – Tuan

0

當你說After the RedirectToAction is called the Model object is null and throws an exception.,因爲在代碼告訴你,你不跟你打電話RedirectToAction後的模型做任何事這是一個小我不清楚你的意思。

您的意思是您的ApplicationReview視圖中的模型爲null?

編輯:

空引用異常表示該變量被取消引用。沒有任何東西可以解除模型的引用。也許如果你發佈堆棧軌道,它會有所幫助。

+0

對不起,沒有更清楚。執行** SubmitApplication ** Action Method後,在** SubmitApplication **視圖中拋出異常。據我所知,** ApplicationReview **操作從來沒有實際調用過,因此關聯的View永遠不會被渲染。 – JoeGeeky

+0

@JoeGeeky - 查看更新。 –