繁体   English   中英

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

[英]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请求,则完全没有必要设置此请求标头。 在发出POSTPUT请求时,需要设置Content-Type标头,以便向服务器指示您为请求的主体使用了哪种编码。 根据定义,GET请求没有主体。

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

综上所述:您不应将服务器端代码与客户端javascript混合使用。 最好将关注点明确分开,因此基本上ScirptManagerScirptManager中忘记ScirptManager,在客户端上的AJAX调用的成功回调中执行所需的任何客户端逻辑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM