2009-02-27 10 views
3

asp.net 2.0 initiiert control/jQuery/AJAXprüfen, was anfordern AJAX

<script type="text/javascript"> 
//updated to show proper method signature 

var prm = Sys.WebForms.PageRequestManager.getInstance(); 

prm.add_endRequest(hideMessage); 

function hideMessage(sender, args) 
{ 
    var ctl = args.get_postBackElement(); 
    //check if ctl is the disired control 
    //hide user notification message 
} 
</script> 

Ich habe mehrere Steuerelemente auf der Seite, die die AJAX-Anforderung initiieren könnte, aber ich will nur meine js feuern, wenn ich einen Klick bestimmter Knopf. Wie überprüfe ich, welche Kontrolle die Anfrage ausgelöst hat, damit ich JS entsprechend feuern kann.

EDIT: Ich arbeitete um es herum, aber ich würde immer noch gerne wissen, ob ich es so machen kann.

Klarstellung: ich die JS von Onclick-Ereignisse nicht nennen kann, weil die Seite innerhalb des Update ist, und ich möchte nur die JS auszuführen, wenn Ajax-Request beendet und es wurde von einer bestimmten Taste auf dem ausgelöst Seite. Auf der Serverseite setze ich myLabel.Text auf einen Text, und dann überprüft js, ob die innerHTML von $ (myLabel.CliendID) nicht leer ist und feuert die js ab. Das Überprüfen des InnerHTML ist meine Arbeit, da ich nicht herausfinden kann, wie man den "Absender" von AJAX Request überprüft. Hoffe, das macht jetzt mehr Sinn.

edit2: Ich habe einige documentation gelesen, und stellt sich heraus, dass Sie die "Sender" Kontrolle überprüfen können.

Vielen Dank.

Antwort

6

Dies ist, was ich in meinem Code tun, um zu identifizieren, welches Steuerelement die Anfrage initialisiert hat. Aller Javascript-Code.

function pageLoad() { 
    if (!Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack()) { 
     Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler); 
     Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(initializeRequest); 
    } 
} 
function endRequestHandler(sender, args) { 
    if (sender._postBackSettings.sourceElement.id == '<%= gvResults.ClientID %>')  { 
     //do something because of this... 
    } 
} 
function initializeRequest(sender, args) { 
    if (CheckForSessionTimeout()) { 
     args.set_cancel(true); 
    } 
    else { 
     if (sender._postBackSettings.sourceElement.id == '<%= gvResults.ClientID %>') { 
      //do something because of this 
     } 
    } 
} 

EDIT
Hier ist das Verfahren auf der Clientseite für Timeout des Prüfens.

var sessionTimeoutDateTime = new Date(); 
    var sessionTimeoutInterval = <%= this.SesstionTimeoutMinutes %>; 

    function CheckForSessionTimeout() { 
     var currentDateTime = new Date() 
     var iMiliSeconds = (currentDateTime - sessionTimeoutDateTime); 
     if (iMiliSeconds >= sessionTimeoutInterval) { 
      ShowSessionTimeout(); 
      return true; 
     } 
     return false; 
    } 
+0

können Sie die CheckForSessionTimeout() -Methode in Ihr Code-Snippet einbeziehen? –

+0

yep ... ich kann es tun. Die this.SessionTimeoutMinutes ist eine Eigenschaft auf der Webseite. – RSolberg

0

Ich würde empfehlen, dass Sie nicht jedes Steuerelement die gleiche Javascript-Funktion ausführen. ODER, wenn sie dies tun, übergeben Sie einen Parameter, der angibt, welcher davon ausgeführt wurde.

Dann können Sie Ihren Ajax in die js-Funktion aufnehmen, die das Steuerelement ausführt.

Und, wenn ich das Problem nicht richtig verstehe, könnten Sie es vielleicht näher erklären oder etwas Code posten.

+0

siehe die Klarstellung, hoffe die Frage macht jetzt mehr Sinn. –

0

Ich habe einige documentation gelesen, und stellt sich heraus, dass Sie die "Sender" Kontrolle überprüfen können. JS in der Frage wird aktualisiert, um die richtige Methodensignatur anzuzeigen.

This article gibt noch bessere Erklärung.