1

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

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然后它发送它...但是为什么呢?

4

1 回答 1

2

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

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

除此之外,您必须单独发送对象的每个属性并重建它。您也可以查看类似的内容:如何将对象序列化为查询字符串格式?并且可能构建您自己的序列化对象的实用程序。但是你仍然需要在你的接收方法上重建它,因为这不会自动完成。

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

于 2015-05-27T15:26:11.410 回答