我正在开发一个使用 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/