2009-05-19 6 views
8

J'ai écrit une application Asp. Net MVC qui s'exécute dans un IFrame. Lorsque l'une de mes méthodes de contrôleur renvoie RedirectToAction(), je souhaite rediriger l'URL du navigateur vers l'adresse, pas seulement mon IFrame. Comment ferais-je cela? Parce que je cours dans un autre site, je vais devoir passer une URL absolue au navigateur 'http://parentsite.com/myapp/ {controller}/{action}'Asp .Net MVC RedirectToAction avec l'URL absolu

Je suppose que c'est l'équivalent de définir l'attribut cible de mes liens hypertexte à '_top 'afin que le site entier redirige (ce sera assez simple en étendant le HtmlHelper), mais comment je le fais pour les redirections côté serveur? Jusqu'à présent, ma solution consiste à surcharger OnResultExecuting, à extraire l'URL vers laquelle je souhaite rediriger, puis à rediriger vers une vue Frame Breaker en passant l'URL que je voulais initialement rediriger en tant que paramètre. La vue Frame Breaker affiche simplement un javascript qui définit l'URL du navigateur vers mon URL d'origine. Cette approche a une requête HTTP supplémentaire que je voudrais, mais au moins ne viole aucun principe MVC (je ne pense pas!). Pensées?

Merci

Répondre

7

Utilisez Redirect() au lieu de RedirectToAction() et passer dans l'url.

Edit:

Je pense que vous aurez besoin d'un peu de JavaScript pour sortir de l'iframe sur le côté client. La redirection vers une URL n'affecte que l'image actuelle.

2

Je recommande l'extension de la HtmlHelper et l'utiliser dans le côté serveur réoriente aussi:

return Redirect(Url.YourExtension()); 
3

passer votre URL à votre vue ou peut-être vous pouvez utiliser Url.RouteUrl() dans la vue elle-même.

Ainsi, par exemple ...

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

Ensuite, votre vue peut utiliser cette valeur pour faire une redirection. Utilisez Javascript pour détecter s'il y a un parent, puis définissez l'emplacement dans la fenêtre courante. L'exemple ci-dessous, au lieu d'utiliser la vue fortement typée, utilise RouteUrl vers un contrôleur/une action spécifique.

Espérons que cela aide.

 
<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> 
Questions connexes