重定向到不保留变量的不同控制器的动作

本文关键字:控制器 变量 保留 重定向 | 更新日期: 2023-09-27 17:50:56

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

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,它发送了它…但是为什么呢?

重定向到不保留变量的不同控制器的动作

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

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

除此之外,您必须单独发送对象的每个属性并重建它。您还可以研究一下这样的问题:如何将对象序列化为查询字符串格式?也许还可以构建自己的实用程序来序列化对象。但是您仍然需要在接收方法上重建它,因为这不会自动完成。

张贴的表单也可以映射到一个动作的参数中定义的模型,但这看起来不像你想要做的。