Asp.net mvc 如何使用jQuery将对象列表传递给ASP.NET MVC操作?

Asp.net mvc 如何使用jQuery将对象列表传递给ASP.NET MVC操作?,asp.net-mvc,jquery,Asp.net Mvc,Jquery,我在.NET中定义了一个对象类型,我想在列表中接收它作为ASP.NET MVC操作方法的输入 这是我尝试接收的动作方法和类 public class WhereClause { public string ColumnInformation { get; set; } public string WhereValue { get; set; } public string AndOr { get; set; } public

我在.NET中定义了一个对象类型,我想在列表中接收它作为ASP.NET MVC操作方法的输入

这是我尝试接收的动作方法和类

public class WhereClause
    {
        public string ColumnInformation { get; set; }
        public string WhereValue { get; set; }
        public string AndOr { get; set; }
        public string Comparer { get; set; }
    }

    public ActionResult Grid(string query, int skip = 0, int take = 50,  List<WhereClause> whereClauses = null)
    {
        GridViewModel gvm = new GridViewModel();
        gvm.Query = query;
这里是Javascript,我使用jQuery从一组表行构建集合,然后调用jQuery ajax方法

var whereClauses = [];

    // Iterate over every row in the table and pull the values fromthe cells.
    divQueryWidget.find('.tblWhereClauses tr').each(function (x, y) {
        var tds = $(y).find('td');
        var columnInformation = $(tds[0]).html();
        var whereValue = $(tds[1]).html();
        var andOr = $(tds[2]).html();
        var comparer = $(tds[4]).html();

        // Create a whereClause object
        var whereClause = {};
        whereClause.ColumnInformation = columnInformation;
        whereClause.WhereValue = whereValue;
        whereClause.AndOr = andOr;
        whereClause.Comparer = comparer;

        whereClauses.push({
            ColumnInformation: columnInformation,
            WhereValue: whereValue,
            AndOr: andOr,
            Comparer: comparer
        });

    });

    //divQueryWidget.find('#queryResultsGrid').
    $.ajax({
        type: 'GET',
        url: '<%= Url.Action("Grid", "Query") %>',
        dataType: 'html',     
        data: { query: divQueryWidget.find('#activeQuery').val(), whereClauses: whereClauses },
        success: function (data, textStatus, XMLHttpRequest) { divQueryWidget.find('#queryResultsGrid').append(data); divQueryWidget.find('.loading').css('visibility', 'hidden'); }
    });
这就是事情变得有趣的地方。当调用javascript时,表中有两行应该传递给MVC操作,请注意,当我调试代码时,列表中创建了两个对象,但它们的属性没有填充


我做错了什么,阻止我的Javascript对象转换为.NET列表类型?我应该使用数组吗?我是否需要将某些内容标记为可序列化?

这可能与Jquery发送时用括号括起来的对象字段的名称有关。您可以在Firebug中确认这一点

这可能和Jquery发送时用括号括起来的对象字段的名称有关。您可以在Firebug中确认这一点

我对结果很感兴趣。我从未尝试过用jQueryAjax发布如此大量的数据,但我想这应该是可能的

我认为这里的问题在于标签。 在普通视图中,例如使用foreach循环创建项目列表时,值的标签具有键。你丢了那些钥匙,我想这就是它不起作用的原因

例如,我有一个使用jQuery创建的列表,但以正常的回发方式发送

在FormCollection对象中,我得到以下键

    [0] "Vrbl_Titel"    string
    [1] "Sch_ID"    string
    [2] "Vragen[0].Evvr_Vraag"  string
    [3] "Vragen[0].Evvr_Type"   string
    [4] "Vragen[1].Evvr_Vraag"  string
    [5] "Vragen[1].Evvr_Type"   string
    [6] "Vragen[2].Evvr_Vraag"  string
    [7] "Vragen[2].Evvr_Type"   string
正如您所看到的,一个Vragen对象有两个字符串,所以这就是它的外观,我想这就是在发布到服务器之前,您必须在jQuery中创建它的方式


但是要小心,括号之间的整数应该是不间断的。如果您有一个中断,例如01 2 4 5 6,那么MVC将在2停止

我对结果很感兴趣。我从未尝试过用jQueryAjax发布如此大量的数据,但我想这应该是可能的

我认为这里的问题在于标签。 在普通视图中,例如使用foreach循环创建项目列表时,值的标签具有键。你丢了那些钥匙,我想这就是它不起作用的原因

例如,我有一个使用jQuery创建的列表,但以正常的回发方式发送

在FormCollection对象中,我得到以下键

    [0] "Vrbl_Titel"    string
    [1] "Sch_ID"    string
    [2] "Vragen[0].Evvr_Vraag"  string
    [3] "Vragen[0].Evvr_Type"   string
    [4] "Vragen[1].Evvr_Vraag"  string
    [5] "Vragen[1].Evvr_Type"   string
    [6] "Vragen[2].Evvr_Vraag"  string
    [7] "Vragen[2].Evvr_Type"   string
正如您所看到的,一个Vragen对象有两个字符串,所以这就是它的外观,我想这就是在发布到服务器之前,您必须在jQuery中创建它的方式

但是要小心,括号之间的整数应该是不间断的。如果您有一个中断,例如01 2 4 5 6,那么MVC将在2停止