Amikor nem lehet redirectelni

Nagyon hasznos és kényelmes az AJAX használata, azt azonban egy pillanatra sem szabad elfelejteni, hogy aszinkron postback (pl. page method) esetén nincs akkora szabadságunk, mint egy sima szinkron kérés esetén. Bár bizonyos esetekben a teljes oldal életciklus lefut, még egy sima Response.Redirect sem működik.

Ha mégis megpróbáljuk, az alábbi hibaüzenetet kapjuk, sajnos csak futási időben:

Response.Redirect cannot be called in a Page callback.

A megoldás az, hogy ebben az esetben szerver oldalon lemondunk az átirányításról:

  if( !this.Page.IsCallback )
  {
    this.Response.Redirect( "MasikOldal.aspx" );
  }

Helyette kénytelenek vagyunk a böngészőnek JavaScriptet visszaküldeni, ami a window.location tulajdonság írásával kliens oldalról végzi az átirányítást.

Tudtok jobb megoldást?

Technorati-címkék: ,,

Advertisements

3 thoughts on “Amikor nem lehet redirectelni

  1. Péter

    Amikor még gyerekcipőben járt az ms-ajax, és az első ajaxos előadásaid egyikén pont ezt a kérdést tettem fel (hogy mi történik olyankor, ha redirectolni próbálunk, ha egy ajaxos hívás történik) , úgy néztél rám, mint aki nem norma szabvány szerint él 🙂

    Reply
  2. György

    Hoppá, ez elég ciki (rám nézve) 😮 Elnézést kérek érte, különösen hogy úgy látom benned elég mély nyomot hagyott 😦 Ezek szerint te pár évvel megelőztél, én meg csak nemrég futottam bele ebbe a konkrét problémába, korábban soha nem akartam AJAXos hívás közben átirányítani.

    Reply
  3. Péter

    Ne hülyéskedj, semmi baj. Csak emlékszem rá.Általában szeretek kötözködni, pl egy technológia olyan lehetőségeit próbálgatni, ami nem az elsődleges feladata.A html, javascript, ajax, szerveroldali technológia (asp.net) esetén sokszor nem egyértelműek az alapelvek.Pl most akkor kinek is kell irányítania a klienst?Ugye régen az volt a sláger, hogy azért jó az egész webes technológia, mert a szerveroldali t. irányítja a klienst, most pedig szinte mindent ajax-szal akarunk megoldani, azaz kb egy windowsklienst emulálni.És akkor jönnek ugye a gányolások, hogy itt egy updatepanel, ott egy updatepanel, egyiket befrissítem, utána bizonyos feltételektől függően a másikat is, akkor regisztráljunk be egy javascript hívást szerveroldalról…Kár, hogy erre ment el a webes világ…Szerencsére a következő projektem wpf-es lesz 🙂

    Reply

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s