2010-09-27 24 views
4

J'essaie d'obtenir l'URL de la page précédente après que je fais une écriture de réponse et je l'ai regardé sur le web et les gens utilisent HTTP_REFERER mais cela ne fonctionne pas avec Response.Redirect Donc, y a-t-il de toute façon l'URL de la page précédente?Obtenir l'URL précédente page après Response.Redirect

J'ai ce code sur quelques pages et j'ai besoin de savoir quelle page il vient quand il arrive à la servererror/default.aspx Page

Response.Redirect("servererror/default.aspx?404") 

Et sur ma servererror/default.aspx la page je suis juste essayer de saisir la précédent URL de la page et le mettre dans la session Session("ErrorPage")

Merci

Jamie

MISE À JOUR

J'ai maintenant eu à travailler comme ça

Response.Redirect("server-error.aspx?404&" & Request.Url.ToString()) 

qui passe l'URL de la page avec l'erreur à la page suivante et je puis saisir que de la chaîne de requête

Merci

Jamie

+0

Le traitement des erreurs du serveur dans une page aspx est une très, très mauvaise pratique, utilisez plutôt les pages htm (l). –

Répondre

6

Vous pouvez transmettre l'URL de la page précédente à l'URL de la page d'erreur. quelque chose comme

Response.Redirect("servererror/default.aspx?404&url=/folder/page.aspx")

Et puis obtenir la valeur url sur la page d'erreur et rediriger à la page précédente.

+0

Ceci est la meilleure solution, c'est l'approche la plupart des sites là-bas. – jimplode

+0

spécialement comme HTTP_REFERER pourrait être bloqué tout autour dans le navigateur (confidentialité) – eglasius

+0

J'ai adapté votre suggestion pour faire cette Response.Redirect ("server-error.aspx? 404 &" & Request.Url.ToString()) et cela fonctionne grâce –

2

Vous pouvez essayer Server.Transfer au lieu de voir si elle remplit la valeur HTTP_REFERER.

+0

Cela ne remplit pas le champ referrer, mais je crois qu'il remplirait le ClientFilePath car c'est ce qu'ils demandaient initialement, et vous les avez ensuite transférés. – jimplode

2

Gardez à l'esprit ce que Response.Redirect fait: Il émet 302 « trouvé » au client. Ce code de réponse est destiné à indiquer que le contenu que vous recherchez n'est pas à l'emplacement que vous avez demandé, mais plutôt ailleurs.

Étant donné cette information; la page qui émet le Response.Redirect n'est pas du tout le 'referrer' du tout, alors. C'est pourquoi la page qui fait référence à cette page est toujours signalée comme référée.

Comme Réunions mondaines noté ci-dessus, vous devez inclure dans la chaîne URL vous redirigez à toute information supplémentaire dont vous avez besoin, comme l'URL de la page en cours

1

Je sais que un ancien poste à répondre Même le gars qui ont posté cette question a trouvé une solution pour résoudre sa question ............. mais tard hier soir, je faisais face à la même difficulté, donc je suis venu avec une solution de contournement qui travaille sur mon cas ...

J'ai 2 pages Page1.aspx et Page2.aspx J'ai un Button1 et Button2 sur le Page1.aspx maintenant quel est le scénario lorsque je redirige vers Page2.aspx je veux accéder aux contrôles Page1.aspx qui est appelé Page précédente ..... J'utilise donc PostBackUR L d'un bouton mais dans ce cas je n'obtenais pas l'événement Click sur CodeBehind ......... alors comment dois-je résoudre ce problème ............. Ce que j'ai fait est que je mets la Button2.PostBackURL = « Page2.aspx » et lorsque l'événement Button1 i Cliquez triggers suis enregistrer le script de démarrage qui appelle événement Button2.click maintenant je reçois les contrôles page précédente ......... .

Voici le code ..... si quelqu'un cherche même fonctionnalité ............ Ils seront aidés dans un certain sens ........

ASPX code

<asp:Button ID="btnSave" runat="server" Style="font-weight: 700" Text="Save" 
    onclick="btnSave_Click" /> 

code-behind

protected void btnSave_Click(object sender, EventArgs e){ 
    try 
    { 
     StringBuilder objStringBuilder = new StringBuilder(); 
     objStringBuilder.AppendLine("<script type='text/javascript' language='javascript'>"); 
     objStringBuilder.AppendLine("document.getElementById('" + btnHidden.ClientID + "').click();"); 
     objStringBuilder.AppendLine("</script>"); 

     ClientScript.RegisterStartupScript(Page.GetType(),"Key1", objStringBuilder.ToString()); 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    }} 

salutations,