【问题标题】:Asp .Net MVC RedirectToAction with absolute URL具有绝对 URL 的 Asp .Net MVC RedirectToAction
【发布时间】:2010-10-27 11:32:53
【问题描述】:

我编写了一个在 IFrame 中运行的 Asp .Net MVC 应用程序。当我的一个控制器方法返回 RedirectToAction() 时,我希望顶部浏览器 URL 重定向到该地址,而不仅仅是我的 IFrame。我该怎么做呢?因为我在另一个站点中运行,所以我需要将绝对 URL 传递给浏览器,即 'http://parentsite.com/myapp/{controller}/{action}'

我想这相当于将我的超链接的目标属性设置为“_top”,以便整个站点重定向(通过扩展 HtmlHelper 这将非常简单),但是我如何为服务器端重定向做呢?

到目前为止,我的解决方案是覆盖 OnResultExecuting,提取我打算重定向到的 URL,然后重定向到一个 Frame Breaker View,将我最初打算重定向到的 URL 作为参数传递。 Frame Breaker View 只是写出一些将顶部浏览器 URL 设置为我的原始 URL 的 javascript。这种方法比我想要的多了一个 HTTP 请求,但至少不违反任何 MVC 原则(我不认为!)。想法?

谢谢

【问题讨论】:

    标签: asp.net asp.net-mvc


    【解决方案1】:

    使用Redirect() 代替RedirectToAction() 并传入网址。

    编辑:

    我认为您需要一些 JavaScript 才能突破客户端的 IFrame。重定向到 url 只会影响当前帧。

    【讨论】:

      【解决方案2】:

      将您的 URL 传回您的视图,或者您可以在视图本身中使用 Url.RouteUrl()。

      比如说……

      公共 ActionResult Handback() { 返回视图(your_absolute_url); }

      然后您的视图可以使用此值进行重定向。使用 Javascript 检测是否有父级,然后设置位置,否则在当前窗口中执行。下面的示例没有使用强类型视图,而是使用 RouteUrl 到特定的控制器/动作。

      希望这会有所帮助。

      标题>
      【解决方案3】:

      我建议扩展 HtmlHelper 并将其也用于服务器端重定向:

      return Redirect(Url.YourExtension());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-16
        • 2015-06-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多