[英]ScriptManager.RegisterStartupScript in a Public Static function call
有没有一种方法可以在定义为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);
....
}
将在“ this”和“ this.GetType()”上出错
关键字'this'在静态属性,静态方法或静态字段初始化器中无效
在网页中(使用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 };
}
};
...或者还有其他/更好的方法来在公共静态函数中显示弹出窗口?
似乎您要引用的静态方法实际上是一个脚本方法,该方法直接从客户端使用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
请求,则完全没有必要设置此请求标头。 在发出POST
或PUT
请求时,需要设置Content-Type
标头,以便向服务器指示您为请求的主体使用了哪种编码。 根据定义,GET请求没有主体。
您可能会注意到的另一件事是,我使用/UserMaintenance.aspx/GetXML
代替了/UserMaintenance.aspx/GetXML()
作为服务器URL。
综上所述:您不应将服务器端代码与客户端javascript混合使用。 最好将关注点明确分开,因此基本上ScirptManager
在ScirptManager
中忘记ScirptManager,在客户端上的AJAX调用的成功回调中执行所需的任何客户端逻辑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.