【问题标题】:redirect to action of different controller not retaining variable重定向到不保留变量的不同控制器的操作
【发布时间】:2015-08-09 18:44:29
【问题描述】:

我正在从一个控制器重定向到另一个控制器,并在路由值中发送一个对象,但该对象返回为 null:

class Person {
 string Name {get; set;}
}

FirstController {
 ActionResult something() {
  Person p = new Person() { Name = "name" };
  return redirectToAction("AddPerson", "Second", new { person = p });
 }
}

SecondController {
 ActionResult AddPerson(Person person) {
  //I'm hitting this action method but the "person" object is always null for some reason
  //add person
 }
}

是因为不允许传递对象吗?

我尝试将参数更改为字符串而不是 Person 对象,并仅发送 person.Name 并发送它...但是为什么呢?

【问题讨论】:

  • 它生成了什么 URL?
  • @SLaks 不确定,现在检查。我只是尝试发送一个字符串而不是一个“人”并且它起作用了......但是为什么
  • @SLaks 很好,它在重定向时会抛出异常,所以 Idk 它创建了什么 url
  • 你得到什么错误?
  • 空引用错误

标签: c# asp.net-mvc controller actionmethod


【解决方案1】:

您不能像使用内置实用程序那样通过查询字符串传递复杂对象。

您应该发送对该对象的引用(类似于 ID),以便在另一端重新查找它。这仅在 Person 存储在某个地方(会话、数据库等)时才有效。

除此之外,您必须单独发送对象的每个属性并重新构建它。您也可以研究这样的事情:How do I serialize an object into query-string format? 并且可能构建您自己的实用程序来序列化对象。但是你仍然需要在你的接收方法上重建它,因为这不会自动完成。

发布的表单也可以映射到在操作参数中定义的模型,但这看起来不像您想要做的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多