Comment puis-je spécifier une url de retour pour un lien vers le formulaire de connexion?
Assez Simple, il me semble, mais il s'avère ne pas être - principalement en raison du fait que la Vue ne peut pas savoir quel chemin à travers le Modèle et le Contrôleur d'en arriver là. Peu importe, c'est un problème qui a besoin d'une solution:
J'ai un lien de connexion, qui dirige l'utilisateur vers un formulaire pour entrer le nom d'utilisateur et mot de passe. Lorsque l'utilisateur clique sur "soumettre", je veux rediriger vers la page qu'il consulte. La façon la plus simple de le faire semble être de spécifier l'url de la page actuelle comme une querystring (...?returnUrl=...
) et tout le reste est déjà construit.
Mais où puis-je trouver cette url de mon point de vue, au moment de rendre le lien? Je me suis naturellement ne pouvez pas utiliser un RedirectToActionResult que je ne veux pas en réalité de transfert de l'utilisateur - seulement rendre l'url dans un lien. Comment?
EDIT:
J'ai commencé un bounty sur cette question, et donc j'ai jugé bon de préciser mes besoins.
J'ai un UserControl nommé Login.ascx dans mon dossier Partagé. Pour cela, j'ai rendu une ActionLink pour le formulaire de connexion, et il est inclus dans le pied de page sur ma Masterpage. Ce que je veux accomplir est la suivante:
Lorsque le ActionLink est rendu, la querystring returnUrl
est ajouté avec l'un itinéraire à la vue qui est actuellement en cours de rendu. Si cela est effectué, l'utilisateur sera redirigé vers la page qu'il/elle consulte une fois la connexion réussie avec des fonctionnalités qui est déjà construire dans le ASP.NET MVC.
La raison pour laquelle les réponses précédentes n'ont pas été suffisantes est surtout qu'ils n'ont pas fourni un moyen de construire la route de l'url de la vue actuelle. Je ne sais comment faire pour ajouter une chaîne de requête, mais je ne sais pas comment faire pour savoir quoi mettre dans cette chaîne.
Afin de marquer une réponse comme la réponse, je veux une méthode de re-construction de la route de la actuellement affichée à la vue, à partir d'un usercontrol dans la masterpage.
OriginalL'auteur Tomas Aschan | 2009-02-03
Vous devez vous connecter pour publier un commentaire.
La solution est d'utiliser HttpContext.Actuel.Demande.RawUrl comme ceci:
Ou avec une méthode d'extension de MVC futures (Microsoft.Web.Mvc.dll):
ActionController est celui par défaut dans le mvc, mais juste ajouter returnUrl à votre propre.
Précisions - si vous modifiez le post à ce code, vous obtiendrez les bonnes choses =)
OriginalL'auteur Dala
Un autre moyen serait de créer les liens qui envoyer l'utilisateur vers le formulaire de connexion, avec returnUrl=/PageToReturnTo (
<a href="/Account/Login/?returnUrl=/Product/10">Login</a>
par exemple). Vous voulez écrire l'url de retour a été construit à partir de vos itinéraires cependant, l'écriture manuelle de ces liens sur chaque page pourrait être lourd.La connexion par défaut de l'action dans le MVC a la returnUrl fonctionnalités déjà construit. Juste besoin de lui donner une valeur et il fera le reste. Voici un copier /coller de la signature de la méthode à partir d'une nouvelle projet de.
Espère que ça aide ya!
Aussi, la norme autorisation ASP ajouter ?returnURL à toute demande qui est dans une zone protégée (c'est à dire avoir un site web.fichier de configuration autoriser/refuser les règles).
OriginalL'auteur Chaddeus
Vous pouvez utiliser
Page.Request.Url
à obtenir l'itinéraire qui a entraîné dans le rendu de la vue.Si c'est plus d'un détail cosmétique, vous pourriez vouloir unifier les demandes qui sont venus à travers le '/' et '/par défaut.aspx' itinéraires et toujours revenir à la '/' itinéraire. J'ai une propriété d'assistance dans ma page principale qui fait exactement cela.
OriginalL'auteur Franci Penov
Je ne sais pas à propos ASPX, mais il ya un couple de problèmes que nous avons rencontré la construction de ce:
Lorsque l'utilisateur obtient leur mot de passe erroné, et les boucles-autour de la page de Connexion à avoir un nouveau départ, la Cible doit toujours être conservé.
Nous avons également décidé de préserver les variables POST à une page qui ensuite requis le juste-à-temps de connexion
OriginalL'auteur Kristen