所以如果我在第一个控制器中这样做:
public class AController:Controller
{
public ActionResult ActionOne()
{
MyObject myObj = new MyObject()
myObj.Name="Jeff Atwood";
myObj.Age =60;
myObj.Address = new Address(40,"Street");
return RedirectToAction("ActionTwo", "BController", myObj );
}
}
Run Code Online (Sandbox Code Playgroud)
在第二个控制器中,myObj会出来,但地址将为空.
public class BController:Controller
{
public ActionResult ActionOne(MyObject obj)
{
//obj.Address is null?
}
}
Run Code Online (Sandbox Code Playgroud)
这是预期的吗?任何方式呢?
您可以使用TempData存储两个请求之间可用的对象.在内部,默认实现使用Session.
public class AController:Controller
{
public ActionResult ActionOne()
{
MyObject myObj = new MyObject()
myObj.Name = "Jeff Atwood";
myObj.Age = 60;
myObj.Address = new Address(40, "Street");
TempData["myObj"] = myObj;
return RedirectToAction("ActionTwo", "BController");
}
}
public class BController:Controller
{
public ActionResult ActionTwo()
{
MyObject myObj = TempData["myObj"] as MyObject;
// test if myObj is defined. If ActionTwo is invoked directly it could be null
}
}
Run Code Online (Sandbox Code Playgroud)
地址是引用类型,我认为只有“String”和像 int、float 等值类型可以传递,因为记住它们在内部将字符串从一个控制器传递到另一个控制器。
可能您可能需要实现一些序列化接口才能执行此操作(这取决于传输模式、xml、html 或内部使用的传输形式)。
| 归档时间: |
|
| 查看次数: |
8092 次 |
| 最近记录: |