首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >公共静态函数调用中的ScriptManager.RegisterStartupScript

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

Stack Overflow用户
提问于 2017-03-11 21:36:23
回答 1查看 923关注 0票数 0

是否有方法在定义为公共静态的函数中使用ScriptManager.RegisterStartupScript调用?做一些类似的事情

代码语言:javascript
复制
[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网格)中,我有

代码语言:javascript
复制
  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 };
  }
 };

..。或者是否有另一种/更好的方法在公共静态函数中显示弹出窗口?

EN

回答 1

Stack Overflow用户

发布于 2017-03-11 21:38:59

看起来,您所引用的静态方法实际上是一个脚本方法,它直接调用来自客户端的AJAX。在这种情况下,您绝对不需要任何ScriptManager在里面。这个脚本应该在AJAX调用的成功处理程序中执行:

代码语言:javascript
复制
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true)]
public static List<Records> GetXML()
{
    List<Records> results = ... go fetch those results
    return results;
}

然后,当这个AJAX调用成功完成时,在客户机上执行您想要的任何脚本:

代码语言:javascript
复制
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调用的成功回调所需要的任何客户端逻辑。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42740927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档