Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.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# 从ajax函数Jquery调用代码隐藏方法不起作用_C#_Jquery_Ajax_Web Services - Fatal编程技术网

C# 从ajax函数Jquery调用代码隐藏方法不起作用

C# 从ajax函数Jquery调用代码隐藏方法不起作用,c#,jquery,ajax,web-services,C#,Jquery,Ajax,Web Services,在我的aspx页面中有以下JQuery来调用代码隐藏函数 onDelete: function (item) { //Some Code $.ajax({ type: "POST", url: 'Page_Name.aspx/callmethod', data: "{}", contentType: "application/json; charset=utf-8",

在我的aspx页面中有以下JQuery来调用代码隐藏函数

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调用中添加一个错误函数,看看会出现什么错误

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

尝试向$ajax调用中添加一个error函数,看看会出现什么错误

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

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

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();
var clientId=;
$(“#”+clientID).hide();
选项2-需要ASP.Net

如果您需要后端代码(例如,从数据库中查找某些内容,或者出于任何其他原因),那么纯粹通过jQuery进行操作是没有帮助的。在这种情况下,您要做的是执行常规回发场景

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

这里需要注意的是,ASP.Net重新呈现页面需要回发


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

您试图实现的目标本质上是不可能的。在您的webmethod中,我看到以下几行:

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();
var clientId=;
$(“#”+clientID).hide();
选项2-需要ASP.Net

如果您需要后端代码(例如,从数据库中查找某些内容,或者出于任何其他原因),那么纯粹通过jQuery进行操作是没有帮助的。在这种情况下,您要做的是执行常规回发场景

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

这里需要注意的是,ASP.Net重新呈现页面需要回发


总而言之,我不确定你想/需要走哪条路。但是您当前的方法虽然在语法上是有效的,但由于ASP.Net和客户端异步调用的工作方式,将无法正常工作。

尝试对数据使用
{}
“{}”
将被视为字符串,如果您不发送任何参数,则不包括数据参数

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

尝试对数据使用
{}
“{}”
将被视为字符串,或者如果您不发送任何参数,则不包含数据参数

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

您是否检查了console中的错误?不确定,但指定返回数据类型但不返回任何内容是否有效?我希望您的ajax调用会抱怨这样的事情,您正试图通过Ajax调用设置ASP.Net表单元素的属性?那不行。如果ASP.Net需要重新呈现控件,则需要回发,而不是Ajax调用;call.pnlPdtl.Visible=false在我的code@SurajSingh我已经接受了您的回答您是否检查了控制台中的错误?不确定,但指定返回数据类型但不返回任何内容是否有效?我希望您的ajax调用会抱怨这样的事情,您正试图通过Ajax调用设置ASP.Net表单元素的属性?那不行。如果ASP.Net需要重新呈现控件,则需要回发,而不是Ajax调用;call.pnlPdtl.Visible=false在我的code@SurajSingh我已接受您的回答我收到的错误是内部服务器错误我收到的错误是内部服务器错误