So überprüfen Sie, ob die Seite ein Postback innerhalb der reservierten Funktion pageLoad in ASP.NET AJAX ist

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

Frage

Ich suche nach einer Möglichkeit, nach innen zu schauen pageLoad() wenn diese Methode während des Ladeereignisses aufgrund eines Postbacks/asynchronen Postbacks oder aufgrund des ersten Ladens und Zugriffs ausgelöst wird.

Das ist ähnlich Page.IsPostback Eigenschaft innerhalb des Codes hinter der Seite.

Tia, Ricky

War es hilfreich?

Lösung

Eine Möglichkeit, dies zu tun, besteht darin, einen Application.Load-Handler in Application.Init zu vernetzen und diesen Handler dann nach der Ausführung selbst entbinden zu lassen:

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);
}

Das wird nach Application.Init ausgeführt.Es sollte das Letzte sein, bevor pageLoad aufgerufen wird.

Andere Tipps

@Darren:Danke für die Antwort.Ich hatte versucht, pageLoad mit einem Ereignisargument zu erstellen ApplicationLoadEventArgs als Parameter (siehe unten).Allerdings gem Das:

Das Ladeereignis wird für alle Postbacks an den Server ausgelöst, einschließlich asynchroner Postbacks.

Wie Sie angegeben haben, deckt die Eigenschaft isPartialLoad nicht alle Postback-Szenarien ab.Es wäre schön, wenn das Ereignisargument auch die Eigenschaft isPostback enthalten würde.

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

@mmattax:Ich suche nach einer Eigenschaft, die clientseitig aufgerufen werden kann (Javascript).

Was Sie tun können, ist eine Verbindung zum Lastereignis des herzustellen Systemanwendung Klasse.Sie können dann die isPartialLoad-Eigenschaft von verwenden Sys.ApplicationLoadEventArgs Klasse.Ich glaube, das würde Sie wissen lassen, ob Sie sich in einem asynchronen Postback befinden oder nicht.

Um zu wissen, ob Sie sich in einem Postback befinden, müssen Sie dies im serverseitigen Code verarbeiten und an den Client senden.

Sie könnten eine versteckte Eingabe haben, die Sie auf der Serverseite auf einen bekannten Wert setzen, wenn es sich um ein Postback/Callback handelt – und Ihr Javascript könnte diesen Wert überprüfen.

Dennoch hoffe ich wirklich, dass es dafür eine reine Client-Lösung gibt.

Bearbeiten: @mmattax – Ich glaube, er sucht nach einer clientseitigen Lösung – dem JavaScript-Äquivalent dazu.

Sie können Page.IsPostback weiterhin während eines asynchronen Aufrufs verwenden.

Application.Init ist wahrscheinlich ein geeigneteres Ereignis, wenn Sie möchten, dass der Code nur beim ersten Laden ausgeführt wird.

@Dave Ward:Normalerweise würde das funktionieren.Der Code besteht jedoch darin, ein Ereignis an ein Verhaltensobjekt anzuhängen.Da das Verhaltensobjekt während Application.Init erstellt wird, führt das Anhängen an dieses Ereignis zu unvorhersehbarem Verhalten.

Es wäre schön, wenn es ein PostInit-Ereignis gäbe.

@Dave Ward:Die Verwendung der RunOnce-Methode funktioniert einwandfrei.Dies löst mein Problem, ohne dass die Problemumgehung erforderlich ist, um zunächst zu prüfen, ob der Handler bereits vorhanden ist, bevor er an ein Ereignis angehängt wird.

Ich werde Ihre Antwort als akzeptierte Antwort markieren.Danke noch einmal.

Hier ist unser Ajax-Äquivalent zu isPostback, das wir schon seit einiger Zeit verwenden.

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;
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top