Come verificare se la pagina è postback all'interno della funzione riservata pageLoad su ASP.NET AJAX

StackOverflow https://stackoverflow.com/questions/40912

Domanda

Sto cercando un modo per controllare all'interno pageLoad() se questo metodo viene generato durante l'evento di caricamento a causa di un postback/postback asincrono o a causa del caricamento e dell'accesso per la prima volta.

Questo è simile a Page.IsPostback proprietà all'interno del codice dietro la pagina.

Tia, Ricky

È stato utile?

Soluzione

Un modo per farlo è collegare un gestore Application.Load in Application.Init, quindi fare in modo che il gestore si svincoli dopo l'esecuzione:

Sys.Application.add_init(AppInit);

function AppInit() {
  Sys.Application.add_load(RunOnce);
}

function RunOnce() {
  // This will only happen once per GET request to the page.

  Sys.Application.remove_load(RunOnce);
}

Verrà eseguito dopo Application.Init.Dovrebbe essere l'ultima cosa prima che venga chiamato pageLoad.

Altri suggerimenti

@Darren:Grazie per la risposta.Avevo provato a creare pageLoad con l'argomento dell'evento ApplicationLoadEventArgs come parametro (vedi sotto).Tuttavia secondo Questo:

L'evento load viene generato per tutti i postback al server, inclusi i postback asincroni.

Come hai indicato, la proprietà isPartialLoad non copre tutti gli scenari di postback.Sarebbe carino se l'argomento dell'evento contenesse anche la proprietà isPostback.

   function pageLoad(sender, arg) {
      if (!arg.get_isPartialLoad()) {
          //code to be executed only on the first load
      }
   }

@mmattax:Sto cercando una proprietà che possa essere chiamata dal lato client (javascript).

Quello che puoi fare è collegare l'evento load di Sys.Application classe.è quindi possibile utilizzare la proprietà isPartialLoad di Sys.ApplicationLoadEventArgs classe.Credo che ti farebbe sapere se ti trovi in ​​un postback asincrono o meno.

Per sapere se sei in un postback, dovrai gestirlo nel codice lato server ed emetterlo al client.

Potresti avere un input nascosto che imposti su un valore noto sul lato server se si tratta di un postback/callback e il tuo javascript potrebbe controllare quel valore.

Detto questo, spero davvero che esista una soluzione solo client per questo.

Modificare: @mmattax - Credo che stia cercando una soluzione lato client, l'equivalente JavaScript di quella.

È comunque possibile utilizzare Page.IsPostback durante una chiamata asincrona.

Applicazione.Init è probabilmente un evento più appropriato da utilizzare se si desidera che il codice venga eseguito solo al primo caricamento.

@Dave Ward:Questo normalmente funzionerebbe.Tuttavia, il codice consiste nell'allegare l'evento all'oggetto comportamento.Poiché la creazione dell'oggetto comportamento avviene durante Application.Init, l'associazione a tale evento porterà a un comportamento imprevedibile.

Sarebbe bello se ci fosse un evento PostInit.

@Dave Ward:L'uso del metodo RunOnce funziona perfettamente.Questo risolve il mio problema senza avere la soluzione alternativa per verificare prima se il gestore esiste già prima di allegarlo a un evento.

Contrassegnerò la tua risposta come risposta accettata.Grazie ancora.

Ecco il nostro equivalente Ajax di isPostback che utilizziamo da un po'.

public static bool isAjaxRequest(System.Web.HttpRequest request)
    {//Checks to see if the request is an Ajax request
        if (request.ServerVariables["HTTP_X_MICROSOFTAJAX"] != null ||
            request.Form["__CALLBACKID"] != null)
            return true;
        else
            return false;
    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top