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

标签 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 的属性为 null,我仍然可以正常看到其他属性,但 Character 变为 null。

这是为什么呢?有人可以解释为什么 Character 变为 null。 我知道如何修复它,只是不明白为什么它变成空。

最佳答案

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
}

或者,如果您的操作位于同一 Controller 中,只需使用 view() 返回

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

关于c# - 当使用参数重定向到另一个操作时,属性变为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34320111/

相关文章:

c# - Kendo MVC Core - 网格 - 无法通过路线获取数据 - 400 错误请求

c# - NUnit 中的数据驱动测试?

asp.net-mvc - 在内部后台搜索框中搜索其他字段 - v7.1.0

c# - 按日期排列的最新论坛帖子

c# - 通过 TCP 共享 COM 端口

c# - 并非 global.asax C# 捕获的所有错误

c# - SQL 连接池超时

asp.net-mvc - 如何使用 ASP.NET MVC 2 验证两个属性

C# MVC - 在 LINQ 查询中使用 LIKE

asp.net - 如何在同一文件夹中混合 MVC View 和 ASPX 页面?