有没有办法在定义为public static的函数中使用ScriptManager.RegisterStartupScript调用?做点什么
[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);
....
}
将错误输出&#34;此&#34;和&#34; this.GetType()&#34;
关键字&#39;这个&#39;在静态属性,静态方法或静态字段初始值设定项
中无效
在网页中(使用paramquery jquery网格)我有
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 };
}
};
...还是有另一种/更好的方式在公共静态函数中显示弹出窗口?
答案 0 :(得分:1)
您所指的静态方法实际上是一个直接从客户端使用AJAX调用的脚本方法。在这种情况下,你绝对不需要任何ScriptManager
。该脚本应该在AJAX调用的成功处理程序中执行:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true)]
public static List<Records> GetXML()
{
List<Records> results = ... go fetch those results
return results;
}
然后在客户端执行此AJAX调用成功完成时所需的任何脚本:
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 };
}
};
请注意,我已从jqXHR.setRequestHeader("Content-Type", "application/json");
方法中删除了beforeSend
来电 - 如果您要发出GET
请求,则设置此请求标头完全没有意义。在进行Content-Type
或POST
请求时,您需要设置PUT
标头,以便向服务器指示您对请求正文使用了哪种编码。根据定义,GET`请求没有正文。
您可能会注意到的另一件事是我使用/UserMaintenance.aspx/GetXML
代替/UserMaintenance.aspx/GetXML()
作为服务器网址。
总结一下:你不应该将服务器端代码与客户端javascript混合使用。最好明确区分关注点,因此基本上忘记了ScriptMethod中的ScirptManager
,在客户端的AJAX调用成功回调中执行所需的任何客户端逻辑。