【问题标题】:MVC Redirect to a different view in another controllerMVC 重定向到另一个控制器中的不同视图
【发布时间】:2017-09-25 08:54:03
【问题描述】:

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

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

我认为以下可能已经完成,但它无法识别模型......

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

欢迎提出任何建议...

【问题讨论】:

  • 请在您的问题中添加您的模型类、操作“编辑”和错误、您收到的内容
  • 如果您从浏览器发送异步发布请求,RedirectToAction 将无济于事。您需要从服务器发送json数据并在客户端的回调函数中处理。
  • 请提供更多信息。您是通过 JavaScript 和 jQuery 发布,还是使用 @Html.BeginForm 之类的东西,您尝试引用的模型是否与您传入的类型过于绑定,您是在尝试重定向或定向到 JavaScript 中的 URL 还是使用一个标签?

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


【解决方案1】:

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

例如:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 实际上,TempData 是一个糟糕的选择,因为它是一次性访问。这意味着如果用户在重定向后按 F5 刷新页面,数据就消失了。
    【解决方案3】:

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

    无论长短,您都不能使用“有效负载”进行重定向。这不是 HTTP 的工作方式。如果您需要重定向后的数据,则必须以某种方式将其持久化,无论是在数据库中还是在用户会话中。

    【讨论】:

    • 其实是的。您可以使用有效负载重定向,但不能以 OP 的方式重定向。您可以将路由值作为重定向的一部分传递,并且将为该 url 创建一个合适的 url/querystring。
    • 查询字符串不是有效载荷;它是 URI 的一部分。虽然,是的,您可能可以对其进行一些混蛋以传递一些数据,但这样做是完全不合适的。此外,OP 没有提供太多关于数据 是什么 的信息,但鉴于它与客户端相关,它很可能包含您不希望在 URL 中出现的敏感信息。
    • 同意,但我只是想明确表示可以在重定向中传递数据,但正如我在回答中所说的那样,这应该很简单像客户 ID。
    猜你喜欢
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    相关资源
    最近更新 更多