我正在使用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
的属性为空,我仍然可以看到其他属性正常,但Character
变为空。
为什么?有人可以解释为什么Character
变为空。
我知道如何修复它,我只是不明白为什么它变成了空。
答案 0 :(得分:4)
RedirectToAction
建议您的浏览器重定向到新网址。由于浏览器只执行新的GET-Request,模型会一路丢失。您可以以键值形式添加参数。这将添加到URL
RedirectToAction('actionX', new { id = 123 })
然后,您的Action将根据给定的id获取DataObject。
public ActionResult BattleNPC(int arenaId)
{
var model = var arenaModel = ctx.Arenas.FirstOrDefault(a => a.Id == arenaId);
var character = model.Character; // <-- Null
}
或者,如果您的操作位于同一个控制器中,只需使用view()
返回见:When do you use View() vs. RedirectToAction 或:Difference between redirectToAction() and View()