将Javascript对象数组传递给C#代码

时间:2014-10-31 17:51:52

标签: javascript c# asp.net ajax json

我遇到一些问题将我的Javascript对象数组发布到C#Codebehind。我遵循了一个简单的教程,并认为这可以很好地工作,但PassThings中的C#代码隐藏断点永远不会被击中。

我尝试将网址更改为" Default.aspx / PassThings"但它仍然永远不会被发布到我的代码后面,错误提示会显示" [object object"]

这是我的客户方:

Default.aspx的

脚本     

<script>

    function Save() {
        $(document).ready(function () {
            var things = [
        { id: 1, color: 'yellow' },
        { id: 2, color: 'blue' },
        { id: 3, color: 'red' }
        ];

                things = JSON.stringify({ 'things': things });

                $.ajax({
                    contentType: 'application/json; charset=utf-8',
                    dataType: 'json',
                    type: 'POST',
                    url: '/PassThings',
                    data: things,
                    success: function () {
                        alert("success");
                    },
                    error: function (response) {
                        alert(response);
                    }
                });
            });

    }

</script>

HTML

<input type="button" value="Pass Things" onclick="JavaScript: Save();">

Default.aspx.cs

代码隐藏

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Web.Services;

[System.Web.Script.Services.ScriptService]
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    [WebMethod]
    public void PassThings(List<Thing> things)
    {
        var t = things;
    }

    public class Thing
    {
        public int Id { get; set; }
        public string Color { get; set; }
    }

}

有人看到我做错了吗?

感谢您的时间。

1 个答案:

答案 0 :(得分:5)

url传递带网页的正确网址。假设PassThings方法位于文件后面的Default.aspx页面代码中,那么如果脚本代码写在默认值中,则必须传递 url:Default.aspx / PassThings 的.aspx

如果脚本位于 Scripts 文件夹中的单独js文件中,则必须返回一个目录并且必须写入: url:../ Default.aspx / PassThings

$(document).ready(function () {
    var things = [{
        id: 1,
        color: 'yellow'
    }, {
        id: 2,
        color: 'blue'
    }, {
        id: 3,
        color: 'red'
    }];

    things = JSON.stringify({
        'things': things
    });

    $.ajax({
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        type: 'POST',
        url: 'Default.aspx/PassThings',
        data: things,
        success: function () {
            alert("success");
        },
        error: function (response) {
            alert(JSON.stringify(response));
        }
    });
});

并且在您的方法后面的代码中应该使用[WebMethod]进行修饰,它应该是publicstatic

    [WebMethod]
    public static void PassThings(List<Thing> things)
    {
        var t = things;
    }