是否有方法在定义为公共静态的函数中使用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);
....
}是否会在"this“和"this.GetType()”上出错
关键字“this”在静态属性、静态方法或静态字段初始化程序中无效。
在网页(使用参数查询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 };
}
};..。或者是否有另一种/更好的方法在公共静态函数中显示弹出窗口?
发布于 2017-03-11 21:38:59
看起来,您所引用的静态方法实际上是一个脚本方法,它直接调用来自客户端的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或PUT请求时,需要设置PUT头,以便向服务器指示对请求主体使用了什么编码。根据定义,GET`‘请求没有一个主体。
您可能注意到的另一件事是,对于服务器url,我使用了/UserMaintenance.aspx/GetXML而不是/UserMaintenance.aspx/GetXML()。
总之:您不应该将服务器端代码与客户端javascript混在一起。最好有一个明确的关注点分离,因此基本上忘记ScirptManager在您的ScriptMethod中,执行您在客户端的AJAX调用的成功回调所需要的任何客户端逻辑。
https://stackoverflow.com/questions/42740927
复制相似问题