2010-08-17 71 views
2

我已经在.NET中定义了一个对象类型,我想在列表<>中作为ASP.NET MVC操作方法的输入接收该对象类型?如何将对象列表传递给使用jQuery的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; 

而且这里是我从一组使用jQuery表行建立的集合,然后调用jQuery的阿贾克斯()方法中的JavaScript。

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列表<>类型?我应该使用数组吗?我需要将某些东西标记为可序列化吗?

回答

0

我会对结果感兴趣。我从来没有试图用jQuery Ajax发布这么大的数据块,但我想它应该是可能的。

我认为这里的问题是关于标签。 当你在一个普通的视图中制作一个列表项时,例如用一个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.

0

这可能与Jquery发送的包含在圆括号中的对象字段的名称有关(可以在Firebug中进行确认)。

相关问题