将一个模型传递给RedirectToAction()函数

7
我很好奇这是如何工作的。在MVC中,您可以调用View()并传递模型作为参数,但RedirectToAction(至少其中之一)需要一个“routeValues”对象,这似乎是最接近的匹配。
如果您的模型通过此参数传递,那么该模型类型是否可在随后的操作方法中使用?或者是否存在某些注意事项可能会阻止某些情况下的准确翻译?

1
你是在说一个实际的“模型”还是一个“模型对象”? - OakNinja
@OakNinja-- 我不确定你所指的两者之间有什么区别?当我说“model”时,我指的是在Razor中标记为@model的对象,它可用于视图并从控制器传递给视图。我知道你可以使用TempData或ViewBag将模型放入临时存储中,同时重定向;是否有人知道为什么在重定向时不能将模型作为参数传递?View()方法有一个重载,允许您...想知道为什么在重定向中不能做同样的事情。 - larryq
1
传递到强类型视图的_object_是_type _model_。实际上,在视图中的@model行告诉视图,它将传递一个具有特定模型属性的对象。理解了吗?如果没有,我可以给您更详细的答案! - OakNinja
4个回答

5
如果您需要在重定向后将某些相对复杂的对象传递给操作,您可能想要使用Session或TempData:

来自“什么是ASP.NET MVC TempData

ASP.NET MVC TempData字典用于在控制器操作之间共享数据。TempData的值持续到读取它或当前用户的会话超时为止。

默认情况下,TempData使用Session来保持信息,但是,与MVC的许多其他部分一样,这是一个可扩展性点,您可以插入基于Cookie的提供程序(如果您喜欢)。


是的,我通常会将对象放入TempData字典中。然后重定向到的Action应该检查TempData,看它是否有可用于其模型。 - kdawg

4

您不能直接传递一个模型对象,但是您可以传递单个属性,这些属性将映射到您重定向到的操作中的模型。

这通过使用属性构建要重定向的 URL 和接收操作中的模型绑定器来实现。


2

Redirect...方法会导致客户端和服务器之间的往返,因此模型将不可用。


0

我认为这就是你想要的:

  1. 将您的模型保存在Tempdata中

            RequestModel rq = new  RequestModel()   
            ....为您的模型分配一些内容..
            TempData["request"] = rq;
    
            return Redirect("RequestAcknowledgement");
    
  2. 现在为您重定向到的视图创建一个ActionResult,并将您的TempData传回模型。然后将该模型返回给视图。

     public ActionResult RequestAcknowledgement()
        {
           RequestsModel request =  (RequestsModel)TempData["request"];
    
           return View(request);
        }
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接