使用参数重定向到另一个操作时,属性变为NULL

时间:2015-12-16 19:06:53

标签: c# asp.net-mvc

我正在使用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变为空。 我知道如何修复它,我只是不明白为什么它变成了空。

1 个答案:

答案 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()