MVC重定向到另一个控制器中的不同视图

时间:2017-04-27 13:51:12

标签: asp.net-mvc asp.net-mvc-4 redirecttoaction

用户在MVC中完成表单并且正在进行后期操作后,我正在尝试将它们重定向回另一个模型中的另一个视图。

EG。此表单是主表单的子表单,一旦用户完成此子表单,我希望他们返回主表单。

我认为以下可能已经做到了,但它无法识别模型......

//send back to edit page of the referral
return RedirectToAction("Edit", clientViewRecord.client);

任何建议都更受欢迎......

3 个答案:

答案 0 :(得分:1)

你无法按照自己的方式去做。您正试图在网址中传递一个复杂的对象,但这并不起作用。执行此操作的最佳方法是使用路由值,但这需要您专门构建路由值。由于所有这些工作,以及路由值将显示在URL上的事实,您可能希望这个简单尽可能简洁。我建议只将ID传递给对象,然后用它来查找目标操作方法中的对象。

例如:

return RedirectToAction("Edit", new {id = clientViewRecord.client.ClientId});

以上假设您使用带有id参数的标准MVC路由。并且该客户端是一个复杂的对象,而不仅仅是id,在这种情况下,您只需使用id = clientViewRecord.client

答案 1 :(得分:0)

重定向实际上只是一个简单的响应。它具有状态代码(通常为302或307)和Location响应标头,其中包含您要重定向到的URL。一旦客户端收到此响应,他们通常会通过GET请求该URL。重要的是,这是一个全新的请求,除了默认情况下通常用于骑行的内容之外,客户端不会包含任何数据。

长和短,您无法使用“有效负载”重定向。这不是HTTP的工作方式。如果您需要重定向后的数据,则必须以某种方式保留它,无论是在数据库中还是在用户的会话中。

答案 2 :(得分:0)

如果您打算使用该模型重定向到某个操作。我建议使用tempdata将模型传递给action方法。

TempData["client"] = clientViewRecord.client;    
return RedirectToAction("Edit");


public ActionResult Edit ()
{
 if (TempData["client"] != null)
            {
               var client= TempData["client"] as Client ;
               //to do...
            }    
}