【问题标题】:Calling of Code Behind method from ajax function Jquery not working从ajax函数Jquery调用代码隐藏方法不起作用
【发布时间】:2014-05-26 05:57:12
【问题描述】:

我的 aspx 页面中有以下 JQuery 来调用 Code behind 函数

onDelete: function (item) {
      //Some Code
       $.ajax({
           type: "POST",
           url: 'Page_Name.aspx/callmethod',
           data: "{}",
           contentType: "application/json; charset=utf-8",
           dataType: "json"
       });
    }

我正在调用下面的方法

[WebMethod]
public static void callmethod()
{
    Page_Name call = new Page_Name();
    call.Function();
    call.Function_Structure();
    call.Function_items_Structure();
    call.OClear();
    call.PClear();
    call.IClear();
}

我已经尝试了很多方法,但它没有很好地工作任何一个点我这里可能有什么问题

【问题讨论】:

  • 您检查过控制台是否有错误?
  • 不确定,但指定返回数据类型但不返回任何内容是否有效?我希望您的 ajax 调用会抱怨这样的事情。
  • 另外,我是否正确理解call.pnlCH.Visible = false;,您正在尝试通过 Ajax 调用设置 ASP.Net 表单元素的属性?那是行不通的。如果 ASP.Net 需要重新呈现控件,则需要回发,而不是 Ajax 调用。
  • 我删除了代码中的call.pnlCH.Visible = false; call.pnlPdtl.Visible = false;
  • @SurajSingh 我接受了你的回答

标签: c# jquery ajax web-services


【解决方案1】:

尝试将{} 用于您的数据,如果您不发送任何参数,"{}" 将被视为字符串或不包含数据参数。

onDelete: function (item) {
      //Some Code
       $.ajax({
           type: "POST",
           url: 'Page_Name.aspx/callmethod',
          // data: "{}",
              data: {}, 
           contentType: "application/json; charset=utf-8",
           dataType: "json"
       });
    }

Here

【讨论】:

    【解决方案2】:

    你想要完成的事情本质上是不可能的。在您的网络方法中,我看到以下几行:

    call.pnlCH.Visible = false;
    call.pnlPdtl.Visible = false;
    

    您正在尝试更改 ASP.Net 表单元素的属性,但没有使用回发操作。如果您没有回发,ASP.Net 将不会为您重新呈现您的页面!它只会返回您告诉 webmethod 返回的内容,在您的情况下是 void

    有两种方法可以解决这个问题,我不确定你想要哪种:

    选项 1 - 无需 ASP.Net 干扰

    如果你只想改变某些元素的可见性,你可以通过 jQuery 来实现,你不需要你的后端。

    $("#myElement").show();
    $("#myElement").hide();
    

    对于 ASP.Net 控件,您需要知道 clientId。

    var clientId = <%= pnlCH.ClientID %>;
    
    $("#" + clientID).hide();
    

    选项 2 - 需要 ASP.Net

    如果您为此需要后端代码(例如,从数据库中查找某些内容,或任何其他好的理由),那么纯粹通过 jQuery 执行此操作将无济于事。在这种情况下,您要做的是执行一个常规回发场景

    回发页面意味着 ASP.Net 将再次呈现您的页面。您对表单元素所做的任何更改都会被渲染。

    需要注意的是,需要回发才能让 ASP.Net 重新呈现您的页面。

    总而言之,我不确定您想要/需要采用哪种方式。但是,您当前的方法虽然在语法上有效,但由于 ASP.Net 和客户端异步调用的工作方式,它根本不起作用。

    【讨论】:

      【解决方案3】:

      尝试在 $ajax 调用中添加错误函数,看看会返回什么错误。

      data: {},
      dataType: "json",
      error: function(jqXHR, textStatus, errorThrown ) {
         // debug here
         alert(jqXHR);
      },
      success: function() ... 
      

      【讨论】:

      • 我得到的错误是 Internal Server Error
      猜你喜欢
      • 1970-01-01
      • 2013-08-16
      • 2013-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2015-08-12
      • 1970-01-01
      相关资源
      最近更新 更多