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

MVC Redirect to a different view in another controller

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

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

我以为下面的可能已经做到了,但是它不识别模型...

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

欢迎提出更多建议...

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

总而言之,您不能使用 "payload" 重定向。这不是 HTTP 的工作方式。如果重定向后需要数据,则必须以某种方式持久化它,无论是在数据库中还是在用户的 session 中。

如果您打算重定向到模型的操作。我可以建议使用临时数据将模型传递给操作方法。

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


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

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

例如:

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

以上假定您使用采用 id 参数的标准 MVC 路由。那个客户端是一个复杂的对象而不仅仅是 id,在这种情况下你只需要使用 id = clientViewRecord.client