2009-05-19 33 views
8

Tôi đã viết một ứng dụng Asp .Net MVC chạy bên trong một IFrame. Khi một trong các phương thức điều khiển của tôi trả về RedirectToAction(), tôi muốn URL trình duyệt hàng đầu chuyển hướng đến địa chỉ, không chỉ là IFrame của tôi. Tôi sẽ đi đâu để tới đó? Bởi vì tôi đang chạy bên trong một trang web khác, tôi sẽ cần chuyển một URL tuyệt đối tới trình duyệt tức là 'http://parentsite.com/myapp/ {controller}/{action}'Asp. Net MVC RedirectToAction với URL tuyệt đối

Tôi đoán nó tương đương với việc đặt thuộc tính đích của siêu liên kết của tôi thành '_top 'để toàn bộ trang web chuyển hướng (điều này sẽ khá đơn giản bằng cách mở rộng HtmlHelper), nhưng làm cách nào tôi làm điều đó cho chuyển hướng phía máy chủ? Cho đến nay, giải pháp của tôi là ghi đè OnResultExecuting, trích xuất URL mà tôi định chuyển hướng đến, sau đó thay vào đó, chuyển hướng đến Khung xem Bộ ngắt Khung chuyển URL tôi dự định ban đầu để Chuyển hướng đến làm tham số. Khung Breaker View chỉ cần viết ra một số javascript đặt URL trình duyệt hàng đầu thành URL ban đầu của tôi. Cách tiếp cận này có một yêu cầu HTTP bổ sung hơn tôi muốn, nhưng ít nhất không vi phạm bất kỳ nguyên tắc MVC nào (tôi không nghĩ!). Suy nghĩ?

Cảm ơn

Trả lời

7

Sử dụng Redirect() thay vì RedirectToAction() và vượt qua trong url.

Chỉnh sửa:

Tôi nghĩ bạn sẽ cần một số JavaScript để thoát ra khỏi IFrame ở phía máy khách. Việc chuyển hướng đến một url sẽ chỉ ảnh hưởng đến khung hiện tại.

2

tôi khuyên bạn nên mở rộng HtmlHelper và sử dụng nó trong phía máy chủ chuyển hướng quá:

return Redirect(Url.YourExtension()); 
3

Vượt qua URL của bạn trở lại để xem bạn hoặc có thể bạn có thể sử dụng Url.RouteUrl() trong View riêng của mình.

Vì vậy, ví dụ ...

 
public ActionResult Handback() 
{ 
    return View(your_absolute_url); 
} 

Rồi Xem bạn có thể sử dụng giá trị này để làm một chuyển hướng. Sử dụng Javascript để phát hiện nếu có một phụ huynh, sau đó thiết lập vị trí khác làm điều đó trong cửa sổ hiện hành. Ví dụ bên dưới, thay vì sử dụng chế độ xem được nhập mạnh, hãy sử dụng RouteUrl cho một bộ điều khiển/hành động cụ thể.

Hy vọng điều này sẽ hữu ích.

 
<html> 
<head> 
    <title></title> 
</head> 
<body> 
    <script type="text/javascript"> 
     if (window.parent != null) 
      window.parent.location = '<%= Url.RouteUrl(new { 
        controller = "MyController", action = "MyAction" }) %>'; 
     else 
      window.location = '<%= Url.RouteUrl(new { 
        controller = "MyController", action = "MyAction" }) %>'; 
    </script> 
</body> 
</html> 
Các vấn đề liên quan