C# 公共静态函数调用中的ScriptManager.RegisterStartupScript
有没有办法在定义为公共静态的函数中使用ScriptManager.RegisterStartupScript调用?像这样做C# 公共静态函数调用中的ScriptManager.RegisterStartupScript,c#,asp.net,C#,Asp.net,有没有办法在定义为公共静态的函数中使用ScriptManager.RegisterStartupScript调用?像这样做 [WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true)] public static List<Records> GetXML(System.Web.UI.Page page) { .... ScriptManager.RegisterStartupS
[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);
....
}
。。。或者,是否有其他/更好的方式在公共静态函数中显示弹出窗口?您所指的静态方法实际上是一种使用AJAX从客户端直接调用的脚本方法。在这种情况下,您完全不需要任何
ScriptManager
。此脚本应在AJAX调用的成功处理程序中执行:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true)]
public static List<Records> GetXML()
{
List<Records> results = ... go fetch those results
return results;
}
请注意,我已经删除了jqXHR.setRequestHeader(“内容类型”、“应用程序/json”)
从您的beforeSend
方法调用-如果您将发出GET
请求,则设置此请求头完全没有意义。当您发出POST
或PUT
请求时,需要设置内容类型
标题,以便向服务器指示您对请求正文使用了什么编码。根据定义,GET`请求没有主体
您可能注意到的另一件事是,我对服务器url使用了/UserMaintenance.aspx/GetXML
而不是/UserMaintenance.aspx/GetXML()
总而言之:您不应该将服务器端代码与客户端javascript混用。最好明确区分关注点,因此基本上不要在ScriptMethod中使用
scirtmanager
,在客户端AJAX调用的成功回调中执行所需的任何客户端逻辑。这肯定会消除服务器端的编译错误。在网页(.aspx)上,javascript调用“UserMaintenance.aspx/foo()。为了不让我出错,这个调用会是什么样子?你是说这个静态方法实际上是一个直接使用AJAX从客户端调用的[ScriptMethod]
?在服务器端,它被定义为[WebMethod][ScriptMethod(ResponseFormat=ResponseFormat.Json,UseHttpGet=true)],好的,所以它确实是一个ScriptMethod,有关更多详细信息,请参阅我的更新答案。您应该在此静态方法中使用任何ScriptManager。相反,您应该直接在客户端上执行AJAX调用的成功回调中所需的javascript。当我将“System.Web.UI.Page”添加到服务器端时,javascript不再工作。我在paramquery javascript中遇到一个内部服务器错误,可能是因为url调用设置不正确。
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true)]
public static List<Records> GetXML()
{
List<Records> results = ... go fetch those results
return results;
}
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 };
}
};