我正在从一个控制器重定向到另一个控制器,并在路由值中发送一个对象,但该对象将返回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
并将其发送给...但是为什么?
答案 0 :(得分:2)
您无法通过查询字符串传递复杂对象,就像使用内置实用程序一样。
您应该发送对该对象的引用(类似ID),您可以在另一端重新查找它。这仅适用于Person存储在某处(会话,数据库等)。
除此之外,你必须单独发送每个对象的适当性并重建它。您也可以查看类似的内容:How do I serialize an object into query-string format?并且可能构建自己的实用程序来序列化对象。但是你仍然需要在接收方法上重建它,因为这不会自动完成。
发布的表单也可以映射到动作参数中定义的模型,但这看起来不像您尝试的那样。