我在.NET中定义了一个我希望在List<>中接收的对象类型作为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操作时,请注意我在调试代码时如何在列表中创建了两个对象,但是它们的属性没有被填充。 / p>
我做错了什么阻止我的Javascript对象转换为.NET列表&lt;&gt;类型?我应该使用数组吗?我需要将某些内容标记为可序列化吗?
答案 0 :(得分:0)
它可能与Jquery发送的括号中包含的对象的字段名称有关(您可以在Firebug中确认)。
答案 1 :(得分:0)
我对结果感兴趣。我从未试图用jQuery Ajax发布这么大的数据,但我想它应该是可能的。
我认为这里的问题是关于标签。 当你制作一个List&lt;&gt;例如,在普通视图中,具有foreach循环的项目,值的标签具有键。你错过了那些钥匙,我认为这就是为什么它不起作用。
例如,我有一个用jQuery制作的List,但是发送正常的回发。
在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对象有2个字符串,正如你所看到的,所以这就是它的外观,我想这是你在jQuery中制作它之前必须把它发布到服务器上的。
但是要小心,括号之间的整数应该没有中断。如果你有中断(例如,0 1 2 4 5 6),那么MVC将停在2.