2

基于条件,我如何重定向到另一个控制器和操作,同时携带任何查询字符串和 URL 中的位置哈希。有没有内置的方法来做到这一点?

4

2 回答 2

3

浏览器在执行 HTTP 请求时从不将哈希部分发送到服务器。因此,您无法重定向并保留哈希,因为您不知道哈希,它从未到达服务器。一些技术包括在调用控制器操作之前使用 javascript,该控制器操作应该执行重定向并以这样的方式操作 url,以便将哈希部分作为查询字符串参数发送。因此,一旦您调用此控制器操作,您将能够使用GenerateUrl方法生成带有哈希的 url :

public ActionResult Blah(string hash)
{
    ... do something

    // Generate the url to redirect to using a hash
    var url = UrlHelper.GenerateUrl(
        null,                             // routeName
        "Foo",                            // actionName
        "Bar",                            // controllerName
        null,                             // protocol
        null,                             // hostName
        hash,                             // fragment
        null,                             // routeValues
        RouteTable.Routes,                // routeCollection
        ControllerContext.RequestContext, // requestContext
        false                             // includeImplicitMvcValues
    );

    return Redirect(url);
}
于 2012-07-09T06:02:31.717 回答
0

有 RedirectToAction 方法,但它会向客户端生成 302,这意味着请求会更改(这不是您想要的)。

请看一下如何在 ASP.NET MVC 中模拟 Server.Transfer?,我相信它可以帮助你,虽然它不是内置的。

问候

于 2012-07-09T01:26:51.190 回答