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

时间:2015-05-27 15:16:05

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

我正在从一个控制器重定向到另一个控制器,并在路由值中发送一个对象,但该对象将返回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并将其发送给...但是为什么?

1 个答案:

答案 0 :(得分:2)

您无法通过查询字符串传递复杂对象,就像使用内置实用程序一样。

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

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

发布的表单也可以映射到动作参数中定义的模型,但这看起来不像您尝试的那样。