【问题标题】:Property become NULL when redirecting to another action with parameter使用参数重定向到另一个操作时属性变为 NULL
【发布时间】:2015-12-17 03:21:10
【问题描述】:

我正在用 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 变为空。 我知道如何解决它,我只是不明白为什么它会变为空。

【问题讨论】:

  • Characternull 因为在内部 RedirectToAction() 方法会根据模型中每个属性的 .ToString() 值生成查询字符串值。对于你的最后一个属性,这将返回 &amp;Character="yourAssembly.Character" 不能绑定到 tyeof Character

标签: c# asp.net-mvc


【解决方案1】:

RedirectToAction 建议您的浏览器重定向到新网址。模型在此过程中丢失,因为浏览器只会执行新的 GET 请求。您可以以键值形式添加参数。这将被添加到 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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多