2008-09-02 4 views

Antwort

6

Eine Möglichkeit, die Sie tun können, ist eine Application.Load Handler in Application.Init verkabeln, dann muss das Handler selbst lösen nach dem Laufen:

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

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

2

Sie könnten einen versteckten Eingang, die Sie auf einen bekannten Wert auf der Serverseite gesetzt, wenn es sich um ein Postback/Rückruf ist - und Ihr Javascript diesen Wert überprüfen konnte.

Das heißt, ich hoffe wirklich, dass es eine Client-only-Lösung dafür gibt.

Bearbeiten: @mmattax - Ich glaube, er sucht eine Client-seitige Lösung - das JavaScript-Äquivalent dazu.

2

Was Sie tun können, ist bis zum Lastfall der Klasse Sys.Application verdrahten. Sie können dann die isPartialLoad-Eigenschaft der Klasse Sys.ApplicationLoadEventArgs verwenden. Ich glaube, das würde dich wissen lassen, ob du in einem asynchronen Postback bist oder nicht.

Um zu wissen, ob Sie in einem Post zurück sind, müssen Sie das im serverseitigen Code behandeln und das an den Client ausgeben.

0

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

3

@Darren: Danke für die Antwort. Ich hatte versucht, pageLoad mit dem Ereignisargument ApplicationLoadEventArgs als Parameter zu erstellen (siehe unten). Jedoch nach this:

Das Load-Ereignis wird für alle Postbacks auf den Server ausgelöst, die asynchrone Postbacks enthält.

Wie Sie angegeben haben, deckt die isPartialLoad-Eigenschaft nicht alle Postback-Szenarien ab. Es ist nett, wenn das Event-Argument auch die isPostback-Eigenschaft enthält.

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

@mmattax: Ich bin auf der Suche nach Immobilien, die von Client-Seite (JavaScript) aufgerufen werden kann.

0

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

0

@Dave Ward: Dies würde normalerweise funktionieren. Der Code dient jedoch zum Anhängen des Ereignisses an das Verhaltensobjekt. Da die Erstellung des Verhaltensobjekts während Application.Init erfolgt, führt das Anhängen an dieses Ereignis zu unvorhersehbarem Verhalten.

Es wird nett sein, wenn es PostInit-Ereignis gibt.

0

@Dave Ward: Die Verwendung der RunOnce-Methode funktioniert einwandfrei.Dies löst mein Problem, ohne die Problemumgehung zu haben, zuerst zu prüfen, ob der Handler bereits existiert, bevor er an ein Ereignis angehängt wird.

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

0

Hier ist unser Ajax-Äquivalent zu isPostback, das wir 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; 
    } 
Verwandte Themen