Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 公共静态函数调用中的ScriptManager.RegisterStartupScript_C#_Asp.net - Fatal编程技术网

C# 公共静态函数调用中的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

有没有办法在定义为公共静态的函数中使用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);

....
}

。。。或者,是否有其他/更好的方式在公共静态函数中显示弹出窗口?

您所指的静态方法实际上是一种使用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 };
    }
};