2015-12-16 59 views
1

重定向到另一個動作時,屬性變爲NULL我正在使用C#編寫MVC asp.net編程中的項目。當使用參數

arena類有5個屬性:

public int Id { get; set; } 
public int CharacterId { get; set; } 
public int Forfeit { get; set; } 
public System.DateTime Queued { get; set; } 
public virtual Character Character { get; set; } 

當我使用該得到的Arena從數據庫模型:

var arenaModel = ctx.Arenas.FirstOrDefault(a => a.Character.AccountId == currentUserId); 

沒有什麼是零,有一個人物,ID是存在的,沒收並排隊。 但是,當我使用這個重定向到另一個動作:

return RedirectToAction("BattleNPC", arenaModel); 

,並使用在BattleNPC方法

public ActionResult BattleNPC(Arena model) 
{ 
    var character = model.Character; // <-- Null 
} 

突然對Character的屬性爲null斷點,我仍然可以得到看到細密的其他屬性但Character變爲空。

這是爲什麼?有人可以解釋爲什麼Character變爲空。 我知道如何解決它,我只是不明白爲什麼它變爲空。

+0

'Character'是'null'因爲內部的' RedirectToAction()方法根據模型中每個屬性的'.ToString()'值生成查詢字符串值。而對於你最後一個屬性,這返回'&Character =「yourAssembly.Character」',不能綁定到'Character' –

回答

4

RedirectToAction建議您的瀏覽器重定向到一個新的網址。由於瀏覽器只會執行一個新的GET請求,因此該模型會丟失。您可以使用鍵值形式添加參數。這將被添加到URL

RedirectToAction('actionX', new { id = 123 }) 

然後,您的操作將根據給定的ID獲取DataObject。

public ActionResult BattleNPC(int arenaId) 
{ 
    var model = var arenaModel = ctx.Arenas.FirstOrDefault(a => a.Id == arenaId); 
    var character = model.Character; // <-- Null 
} 

或者,如果你動作位於同一個控制器,只需返回使用視圖()

見:When do you use View() vs. RedirectToAction 或:Difference between redirectToAction() and View()