可以';t将变量从JQueryAJAX传递到C#代码背后

本文关键字:背后 代码 JQueryAJAX 变量 可以 | 更新日期: 2023-09-27 18:29:29

不确定我做错了什么,但我无法让JQuery AJAX调用正确地传递变量。它接受得很好。我可能忽略了一些小事。谢谢

(此外,有没有任何方法可以在不使用[WebMethod]或通过URL的情况下以这种方式传递数据?)

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
    <script src="Scripts/jquery-1.7.1.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(function() {   
            $('#button').click(function(){
            var json_obj = "{'" + $('#t1').val() + "' : '" + $('#p1').val() + "', '" + $('#t2').val() + "' : '" + $('#p2').val() + "'}";
                $.ajax({
                    type: "POST",
                    url: 'Default.aspx/test',
                    contentType: 'application/json; charset=utf-8',
                    data: "thisisatest",//json_obj,
                    dataType: 'json',
                    success: function(msg) {
                    //$('#result').html(msg.d);
                        alert(msg.d)
                    },
                    error: function(msg) {
                    //$('#result').html(msg.d);
                        alert(msg.d + " err")
                    }
                });
            });
        });
    </script>
</head>
<body>
    <div>
        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>
    </div>
</body>
</html>

背后的代码

    [WebMethod]
    public string test(string json)
    { 
        return json;
    }

可以';t将变量从JQueryAJAX传递到C#代码背后

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

<%@ 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>

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

WebMethods必须是静态的!

http://encosia.com/why-do-aspnet-ajax-page-methods-have-to-be-static/

[WebMethod]
public static string test(string json)
{ 
   return json;
}

您的JSON输入应该是:

var jsonInput = { 'json': 'XXXXXXX'};

其中'json'等于webmethod参数的名称

以及在Ajax函数中

data:JSON.stringify(jsonInput)

您可以将方法更改为GET,并将值附加到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"]);
}

不过,如果你要走这条路,我建议不要使用Code Behinds,因为它们必须处理整个ASP.NET Web窗体页面生命周期。您最好使用ASP.NET处理程序(ashx)。

祝你好运!