2017-03-11 1 views
0

Gibt es eine Möglichkeit, den ScriptManager.RegisterStartupScript-Aufruf in einer als statisch definierten Funktion zu verwenden? Etwas zu tun, wieScriptManager.RegisterStartupScript in einem öffentlichen statischen Funktionsaufruf

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true)] 
public static List<Records> GetXML(System.Web.UI.Page page) 
{ 
.... 

ScriptManager.RegisterStartupScript(this, this.GetType(), "alert", "alert('test');", true); 

.... 
} 

wird Fehler aus auf „diesem“ und „this.GetType()“

Schlüsselwort ‚this‘ in einer statischen Eigenschaft nicht gültig ist, statische Methode oder ein statisches Feld initializer

in der Web-Seite (mit dem paramquery jquery Raster) ich habe

var dataModel = { 
    location: "remote", 
    method: "GET", 
    beforeSend: function (jqXHR, settings) { 
      jqXHR.setRequestHeader("Content-Type", "application/json"); 
    }, 
    getUrl: function() { 
      return { url: "/UserMaintenance.aspx/GetXML()" }; 
    }, 
    getData: function (response) { 
     var data = response.d; 
     return { data: response.d }; 
    } 
}; 

... oder gibt es eine andere/bessere Möglichkeit, ein Popup in einer öffentlichen statischen Funktion anzuzeigen?

Antwort

1

Es scheint, dass die statische Methode, auf die Sie sich beziehen, eine Skriptmethode ist, die direkt mit AJAX vom Client aufgerufen wird. In diesem Fall brauchen Sie absolut keine ScriptManager darin. Dieses Skript sollte in dem Erfolg Handler Ihres AJAX-Aufruf ausgeführt werden:

[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true)] 
public static List<Records> GetXML() 
{ 
    List<Records> results = ... go fetch those results 
    return results; 
} 

und dann auf dem Client ausgeführt werden, was Skript Sie wünschen, wenn dieser AJAX-Aufruf erfolgreich abgeschlossen:

var dataModel = { 
    location: "remote", 
    method: "GET", 
    beforeSend: function (jqXHR, settings) { 
    }, 
    getUrl: function() { 
     return { url: "/UserMaintenance.aspx/GetXML" }; 
    }, 
    getData: function (response) { 
     var data = response.d; 
     // Put your scripts here, not on the server: 
     alert("test"); 
     return { data: response.d }; 
    } 
}; 

Bitte beachten Sie, dass ich Entfernen Sie den jqXHR.setRequestHeader("Content-Type", "application/json"); Anruf von Ihrem beforeSend-Methode - es macht keinen Sinn, diese Anfrage Header zu setzen, wenn Sie eine GET Anfrage machen werden. Sie müssen den Header Content-Type festlegen, wenn Sie eine POST oder PUT Anfrage machen, um dem Server anzuzeigen, welche Kodierung Sie für den Hauptteil der Anfrage verwendet haben. Eine GET`-Anfrage hat definitionsgemäß keinen Körper.

Eine andere Sache, die Sie vielleicht bemerken, ist, dass ich /UserMaintenance.aspx/GetXML anstelle von /UserMaintenance.aspx/GetXML() für die Server-URL verwendet habe.

Also, um zusammenzufassen: Sie sollten Server-Side-Code nicht mit Client-Seite Javascript mischen. Es ist besser, eine klare Trennung von Bedenken zu haben, also vergiss praktisch ScirptManager in deiner ScriptMethod, führe jede clientseitige Logik aus, die du im Erfolgsrückruf deines AJAX-Aufrufs auf dem Client benötigst.

+0

Das entfernt sicherlich den Kompilierfehler auf der Serverseite. Auf der Webseite (.aspx) ruft das Javascript 'UserMaintenance.aspx/foo()' auf. Wie würde dieser Ruf aussehen, um mich nicht auszulöschen? – SteveFerg

+0

Willst du damit sagen, dass diese statische Methode eigentlich eine '[ScriptMethod]' ist, die direkt mit AJAX vom Client aufgerufen wird? –

+0

auf der Serverseite ist definiert [WebMethod] [ScriptMethod (ResponseFormat = ResponseFormat.Json, UseHttpGet = true)] – SteveFerg

Verwandte Themen