如何重定向到具有查询字符串和哈希的另一个控制器?

时间:2012-07-09 00:34:28

标签: c# .net asp.net-mvc c#-4.0 asp.net-mvc-4

根据条件,如何在转移任何查询字符串和URL中的位置哈希时,重定向到另一个控制器和操作。是否有内置的方法来做到这一点?

2 个答案:

答案 0 :(得分:3)

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

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);
}

答案 1 :(得分:0)

有RedirectToAction方法,但它会为客户端生成302,这意味着请求会发生变化(这不是你想要的)。

请查看How to simulate Server.Transfer in ASP.NET MVC?提供的解决方案,我相信它可能对您有所帮助,尽管它不是内置的。

此致