将简单对象和集合传递给MVC3控制器 - 传统的正确用法是什么?

时间:2013-03-01 20:15:16

标签: jquery asp.net ajax asp.net-mvc asp.net-mvc-3

我正在尝试为此AJAX请求获取正确的语法。我知道我需要在列表中使用'traditional:true'参数,但它会破坏传递的其他参数:

$.ajax({
    type: 'GET',
    dataType: 'json',
    url: '../Workflow/GetTasks',
    contentType: "application/json",
    data: {
        queueID: filterData.queueID,
        workflowFilterID: filterData.workflowFilterID,
        genericFilters: filterData.genericFilters
    },
    traditional: true,
    success: function (data) {
    },
    error: function (error) {
        window.console && console.error(error);
    }
});

我的控制器的GetTasks方法:

public ActionResult GetTasks(TaskFilter taskFilter)

public class TaskFilter
{
    public int QueueID { get; set; }
    public int WorkflowFilterID { get; set; }
    public List<GenericFilter> GenericFilters { get; set; }
}

public class GenericFilter
{
    public int AttributeID { get; set; }
    public string FirstValue { get; set; }
    public string SecondValue { get; set; }
}

我可以成功获取我的queueID和workflowFilterID。根据我的设置,我会为GenericFilters获取空值,空列表或包含2个项目的列表,但不会设置任何项目属性。

目前,传递traditional: true会导致queueIDworkflowFilterID被定义,但genericFilters是一个包含0个项目的列表。如果我注释掉传统的参数,我会收到一个包含2个空对象的列表。

有人可以帮我解决这个问题吗?我已尝试在genericFilters中换行$.param(filterData.genericFilters, true)。我在整个对象上尝试了JSON.stringify() ..

1 个答案:

答案 0 :(得分:1)

我想知道一些事情,但最重要的是,应该发布像列表这样的复杂对象。

试试这个:

$.ajax({
    type: 'POST',
    dataType: 'json',