Can';t将变量从jQueryAjax传递到C#代码隐藏

Can';t将变量从jQueryAjax传递到C#代码隐藏,c#,jquery,ajax,json,C#,Jquery,Ajax,Json,我不确定我做错了什么,但我无法让jQueryAjax调用正确地传递变量。它收到的很好。我可能忽略了一些小事。谢谢 (还有,有没有办法不使用[WebMethod]或通过URL以这种方式传递数据?) WebMethods必须是静态的 您的JSON输入应该是: var jsonInput = { 'json': 'XXXXXXX'}; 其中“json”等于webmethod参数的名称 在Ajax函数中 data:JSON.stringify(jsonInput) WebMethods必须是静态的

我不确定我做错了什么,但我无法让jQueryAjax调用正确地传递变量。它收到的很好。我可能忽略了一些小事。谢谢

(还有,有没有办法不使用[WebMethod]或通过URL以这种方式传递数据?)


WebMethods必须是静态的

您的JSON输入应该是:

var jsonInput = { 'json': 'XXXXXXX'};
其中“json”等于webmethod参数的名称

在Ajax函数中

data:JSON.stringify(jsonInput)

WebMethods必须是静态的

您的JSON输入应该是:

var jsonInput = { 'json': 'XXXXXXX'};
其中“json”等于webmethod参数的名称

在Ajax函数中

data:JSON.stringify(jsonInput)

您可以更改方法以获取该值并将其附加到URL,如下所示

$.ajax({
     type: "GET",
     url: 'Default.aspx/test?json=' + 'thisisatest',
     contentType: 'application/json; charset=utf-8',
     success: function(msg) {
          //$('#result').html(msg.d);
          alert(msg.d)
     },
     error: function(msg) {
          //$('#result').html(msg.d);
          alert(msg.d + " err")
     }
});
然后在你的代码后面

protected void Page_Load(object sender, EventArgs e)
{
     Response.ContentType = "application/json; charset=utf-8";
     Response.Write(Request["json"]);
}
如果您打算这样做,我建议不要使用落后的代码,因为它们必须处理整个ASP.NET Web表单页面生命周期。您最好使用ASP.NET处理程序(ashx)


祝你好运

您可以更改方法以获取该值并将其附加到URL,如下所示

$.ajax({
     type: "GET",
     url: 'Default.aspx/test?json=' + 'thisisatest',
     contentType: 'application/json; charset=utf-8',
     success: function(msg) {
          //$('#result').html(msg.d);
          alert(msg.d)
     },
     error: function(msg) {
          //$('#result').html(msg.d);
          alert(msg.d + " err")
     }
});
然后在你的代码后面

protected void Page_Load(object sender, EventArgs e)
{
     Response.ContentType = "application/json; charset=utf-8";
     Response.Write(Request["json"]);
}
如果您打算这样做,我建议不要使用落后的代码,因为它们必须处理整个ASP.NET Web表单页面生命周期。您最好使用ASP.NET处理程序(ashx)


祝你好运

下面是我为您编写的一个完整示例,用于说明这个概念:

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Web.Services" %>
<script type="text/C#" runat="server">

    public class MyModel
    {
        public string T1 { get; set; }
        public string P1 { get; set; }
        public string T2 { get; set; }
        public string P2 { get; set; }
    }

    [WebMethod]
    public static string Test(MyModel obj)
    {
        return "Hello from test";
    }
</script>

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    Type: 1: <input type="text" id="t1" />
    Property 1: <input type="text" id="p1" />
    <br /><br />
    Type 2: <input type="text" id="t2" />
    Property 2: <input type="text" id="p2" />
    <input type="button" value="Add object!" id="button" />
    <br /><br />
    <div id="result"></div>

    <script src="scripts/jquery-1.4.1.js" type="text/javascript"></script>
    <script type="text/javascript">
        $('#button').click(function () {
            var data = JSON.stringify({
                obj: {
                    t1: $('#t1').val(),
                    p1: $('#p1').val(),
                    t2: $('#t2').val(),
                    p2: $('#p2').val()
                }
            });
            $.ajax({
                url: 'default.aspx/test',
                type: 'POST',
                contentType: 'application/json',
                data: data,
                success: function(result) {
                    $('#result').html(result.d);
                }
            });
            return false;
        });
    </script>
</body>
</html>

公共类MyModel
{
公共字符串T1{get;set;}
公共字符串P1{get;set;}
公共字符串T2{get;set;}
公共字符串P2{get;set;}
}
[网络方法]
公共静态字符串测试(MyModel obj)
{
返回“Hello from test”;
}
类型:1:
财产1:


第2类: 财产2:

$(“#按钮”)。单击(函数(){ var data=JSON.stringify({ obj:{ t1:$('#t1').val(), p1:$('#p1').val(), t2:$('#t2').val(), p2:$('#p2').val() } }); $.ajax({ url:'default.aspx/test', 键入:“POST”, contentType:'应用程序/json', 数据:数据, 成功:功能(结果){ $('#result').html(result.d); } }); 返回false; });

在这里,我将代码隐藏和标记混合在同一个
Default.aspx
文件中,但如果您愿意,显然可以将它们分开。

下面是我为您编写的完整示例,以说明这一概念:

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Web.Services" %>
<script type="text/C#" runat="server">

    public class MyModel
    {
        public string T1 { get; set; }
        public string P1 { get; set; }
        public string T2 { get; set; }
        public string P2 { get; set; }
    }

    [WebMethod]
    public static string Test(MyModel obj)
    {
        return "Hello from test";
    }
</script>

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    Type: 1: <input type="text" id="t1" />
    Property 1: <input type="text" id="p1" />
    <br /><br />
    Type 2: <input type="text" id="t2" />
    Property 2: <input type="text" id="p2" />
    <input type="button" value="Add object!" id="button" />
    <br /><br />
    <div id="result"></div>

    <script src="scripts/jquery-1.4.1.js" type="text/javascript"></script>
    <script type="text/javascript">
        $('#button').click(function () {
            var data = JSON.stringify({
                obj: {
                    t1: $('#t1').val(),
                    p1: $('#p1').val(),
                    t2: $('#t2').val(),
                    p2: $('#p2').val()
                }
            });
            $.ajax({
                url: 'default.aspx/test',
                type: 'POST',
                contentType: 'application/json',
                data: data,
                success: function(result) {
                    $('#result').html(result.d);
                }
            });
            return false;
        });
    </script>
</body>
</html>

公共类MyModel
{
公共字符串T1{get;set;}
公共字符串P1{get;set;}
公共字符串T2{get;set;}
公共字符串P2{get;set;}
}
[网络方法]
公共静态字符串测试(MyModel obj)
{
返回“Hello from test”;
}
类型:1:
财产1:


第2类: 财产2:

$(“#按钮”)。单击(函数(){ var data=JSON.stringify({ obj:{ t1:$('#t1').val(), p1:$('#p1').val(), t2:$('#t2').val(), p2:$('#p2').val() } }); $.ajax({ url:'default.aspx/test', 键入:“POST”, contentType:'应用程序/json', 数据:数据, 成功:功能(结果){ $('#result').html(result.d); } }); 返回false; });

我在这里将代码隐藏和标记混合在同一个
Default.aspx
文件中,但如果您愿意,显然可以将它们分开。

第一:数据:“ThisIsTest”不是JSON第二:显示您的代码如何接收和填充请求对象。我知道“ThisIsTest”不是JSON,我用一个简单的字符串注释掉了要测试的JSON,因为它不起作用。不确定第二部分的意思。第一:数据:“ThisisTest”不是JSON第二:显示您的代码如何接收和填充请求对象。我知道“ThisisTest”不是JSON,我用一个简单的字符串注释掉了JSON以测试,因为它不起作用。我不知道你说的第二部分是什么意思。它给了我一个AJAX错误,但没有达到那个代码。但是谢谢。@Ber53rker什么ajax错误?无论如何,如果webmethod不是静态的,那么它无论如何都不会工作。当我点击按钮时,它会说“undefined err”@Ber53rker尝试像在我的示例中那样做。它会给我一个AJAX错误,而不会到达该代码。但是谢谢。@Ber53rker什么ajax错误?无论如何,如果webmethod不是静态的,那么它无论如何都不会工作。当我点击按钮时,它会显示“undefined err”@Ber53rker尝试像我的示例中那样做。你知道我是否能够动态生成模型吗?你说的动态是什么意思?你的设想是什么?您需要向服务器发送哪些值?如果你说的“动态”是指集合,那么,你完全可以拥有集合对象的复杂属性,其中包含可变数量的元素。你知道我是否能够动态生成模型吗?你说的“动态”是什么意思?你的设想是什么?您需要向服务器发送哪些值?如果您所说的“动态”是指集合,那么,您完全可以拥有集合对象的复杂属性,其中包含可变数量的元素。