Announcement

Collapse
No announcement yet.

Verständnisproblem mit Request.UrlReferrer

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Verständnisproblem mit Request.UrlReferrer

    Hallo zusammen,

    da ich noch ziemlich neu bin mit der ganzen ASP.Net-Programmierung und C# habe ich hier eine Frage, die für die meisten hoffentlich hier leicht zu beantworten ist.

    In meiner Beispielanwendung habe ich mir 3 Web-Formulare gebastelt (WebForm1 bis WebForm3). Jedes beinhaltet lediglich ein Label-Objekt, um mir den Inhalt von Request.UrlReferrer anzeigen zu lassen.
    Außerdem einen Button, um im Click-Ereignis (Code-Behind) dann mittels Server.Transfer auf die nächste Webform umzulenken.

    Sobald ich auf WebForm2.aspx angekommen bin, wird mir Request.UrlReferrer richtig angezeigt (http://localhost/..../Webform1.aspx).

    Sobald ich nun den Button betätige und auf Webform3 transferiere, wird mir aber immer noch WebForm1 als UrlReferrer angegeben und nicht WebForm2, wie es doch eigentlich sein sollte.

    Meine Frage: Wie kann ich tatsächlich ermitteln, von welcher Seite aus die aktuelle Anforderung ausgelöst wurde?

    Habe schon MSDN und Bücher gewälzt, aber eine befriedigende Antwort konnte ich leider nicht entdecken...

    Für Eure Hilfe schon mal vielen Dank im Voraus.
    Andreas

  • #2
    Hallo,
    das Verhalten entspricht dem Erscheinungsbild, das auch ein Benutzer im Browser sieht:

    a) Wenn die ASP.NET-Seite über <b>Response.Redirect</b> zu einer anderen Seite wechselt, fordert der Browser die neue Seite ab, so dass die neue URL angezeigt wird.

    b) Wenn die ASP.NET-Seite über <b>Server.Transfer</b> zu einern anderen Seite wechselt, passiert dies nur auf der Serverseite, ohne dass der Browser informiert wird, so dass dieser die neue URL <b>nicht</b> anzeigt.

    In ASP.NET 1.0 führt der Weg über <b>Context.Handler</b> zur aufrufenden Seite.

    <div style="font-family: Courier New; font-size: 10pt; color: black; background: white; border-top: windowtext 1pt solid; padding-top: 0pt; border-left: windowtext 1pt solid; padding-left: 0pt; border-right: windowtext 1pt solid; padding-right: 0pt; border-bottom: windowtext 1pt solid; padding-bottom: 0pt;"><p style="margin: 0px;"><span style="color: green;">// wird über this.Server.Transfer("WebForm2.aspx"); aus WebForm1.aspx aufgerufen</span></p><p style="margin: 0px;"><span style="color: blue;">private</span> <span style="color: blue;">void</span> Page_Load(<span style="color: blue;">object</span> sender, System.<span style="color: teal;">EventArgs</span> e)</p><p style="margin: 0px;">{</p><p style="margin: 0px;">&nbsp; WebPanelBarTest.WebForm1 aPage1 = (WebPanelBarTest.WebForm1) <span style="color: blue;">this</span>.Context.Handler; </p><p style="margin: 0px;">&nbsp; <span style="color: blue;">this</span>.Label1.Text = aPage1.sPage1Data;</p><p style="margin: 0px;">}</p></div>

    In ASP.NET 2.0 ist der Weg über <i>Context.Handler</i> zwar noch verfügbar, aber nicht mehr unbedingt notwendig, da das gleiche Programmiermodell genutzt werden kann wie beim Cross-Page-Posting. Auch beim Transfer ist die Eigenschaft <b>PreviousPage</b> gefüllt beziehungsweise es steht auch die Direktive <b>@PreviousPageType</b> zur Verfügung. Die aufgerufene Seite kann über die Auswertung der Eigenschaften <b>PreviousPage</b> und <b>Page.IsCrossPagePostBack</b> prüfen, ob es sich um einen Cross-Page-Aufruf oder um einen Transfer-Aufruf handelt.

    Über <b>Request.RawUrl</b> kann die Folgeseite auch die URL der aufrufenden Seite bestimmen:

    this.Label3.Text = aPage1.Request.RawUrl

    Comment


    • #3
      Hallo Herr Kosch,

      Ihr Posting hat mir sehr weitergeholfen.

      Mit dem Context.Handler funktioniert alles prima.

      Vielen herzlichen Dank.

      Grüße
      Andreas Schec

      Comment

      Working...
      X