公共静态函数调用中的ScriptManager.RegisterStartupScript

时间:2017-03-11 21:36:23

标签: c# asp.net

有没有办法在定义为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 };
  }
 };

...还是有另一种/更好的方式在公共静态函数中显示弹出窗口?

1 个答案:

答案 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-TypePOST请求时,您需要设置PUT标头,以便向服务器指示您对请求正文使用了哪种编码。根据定义,GET`请求没有正文。

您可能会注意到的另一件事是我使用/UserMaintenance.aspx/GetXML代替/UserMaintenance.aspx/GetXML()作为服务器网址。

总结一下:你不应该将服务器端代码与客户端javascript混合使用。最好明确区分关注点,因此基本上忘记了ScriptMethod中的ScirptManager,在客户端的AJAX调用成功回调中执行所需的任何客户端逻辑。

相关问题