如何重定向并将强类型视图模型传递给另一个操作方法?

时间:2011-02-03 10:54:42

标签: asp.net-mvc

我有2个控制器:AliceControllerBobController。每个都包含Index操作方法。 viewmodel很简单如下:

class Foo{[Required]public int data{get;set;}}

如何将强类型对象从Alice传递给Bob?

class AlliceController: Controller
{

    [HttpPost]
     public ActionResult Index(Foo foo)
     {
         if(ModelState.IsValid)
         {
          // I want to pass foo to Bob's Index. How to do it?
           return RedirectToAction("Index","Bob");
          }
         else    return View();
     }
}

3 个答案:

答案 0 :(得分:4)

理论上,您可以使用RouteValueDictionary参数RedirectToAction

return RedirectToAction("Index", "Bob", new { param = value });

但是无法通过此类重定向传递对象 *,只能将原始类型添​​加到GET URL(int,string等)。

改为使用 TempData

话虽如此,我不知道你想要做什么。

一些担忧:

  • 为什么不直接传递实际值,而不是整个ViewModel?
  • 为什么要在控制器之间重定向? (这可以做到,只是在你的场景中没有看到它的原因)。

答案 1 :(得分:1)

你不能只是实例化BobController并返回它的索引方法的结果,传入Foo吗?

答案 2 :(得分:1)

我不确定您是否可以通过重定向传递强类型对象。

您可以改为仅传递参数

RedirectToAction( new RouteValueDictionary( 
     new{ 
          controller = "Blah", 
          action = "Blah", 
          foo = "Bar" 
     } 
));