代码之家  ›  专栏  ›  技术社区  ›  Paul Mendoza

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

  •  2
  • Paul Mendoza  · 技术社区  · 14 年前

    我在.NET中定义了一个对象类型,希望在列表中接收该类型作为ASP.NETMVC动作方法?

    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操作时,请注意,当我调试代码时,列表中创建了两个对象,但它们的属性没有填充。

    alt text

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

    2 回复  |  直到 14 年前
        1
  •  0
  •   Stefanvds    14 年前

    我对结果很感兴趣。我从来没有尝试过用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中创建它的方式,然后将它发布到服务器。

    但是要小心,括号之间的整数应该是不间断的。如果有中断(例如,0 1 2 4 5 6),那么MVC将在2处停止。

        2
  •  0
  •   Juan Tarquino    14 年前