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 🙂

  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.

  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 🙂

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s