0

我正在尝试在我正在处理的自定义网格上实现排序,并且遇到了 jQuery 到 MVC 参数绑定的问题。

我有一个如下所示的 Jquery 请求

// Javascript

var dataobj =
            {
                test: 3,
                sortInfo: self.sortInfo,
                pagingInfo: {
                    TotalItems: 34, //headercontainer.attr("data-pagingInfo-TotalItems"),
                    ItemsPerPage: headercontainer.attr("data-pagingInfo-ItemsPerPage"),
                    CurrentPage: headercontainer.attr("data-pagingInfo-CurrentPage")
                }
            };

 $.ajax({
            url: self.viewModel.GenericGridHeaderModel.SortingCallbackUrl,
            type: 'POST',
            data: dataobj,
            dataType: "json",
            success: function (html) {...}
         });

// C#
public PartialViewResult GenericGridSort(int test, SortInfo sortInfo, PagingInfo pagingInfo){
...
}

目前,我在 Javascript 中的 sortInfo 对象中有非空值,我看到这些值已正确发布,但是在操作方法中,这些值没有正确绑定。我看到的只是 sortInfo 和 pagingInfo 参数的默认值。事实上,测试参数正确地获得了值 3。

为清楚起见,这是我的 sortInfo 模型

public enum SortDirection
{
    None = 0,
    Ascending = 1,
    Descending = 2
}

public class SortInfo
{
    public int FieldIndex { get; set; }
    public string FeildName { get; set; }
    public SortDirection SortDirection { get; set; }
}

谁能告诉我我在这里想念什么?

谢谢大家!

4

2 回答 2

1

我相信您没有对 JSON 有效负载进行编码。

你应该使用:

data: $.toJSON(dataobj),

或者

data: JSON.stringify(dataobj),

此外,对于 contentType 使用:

contentType: 'application/json; charset=utf-8',

这是有关将JSON 有效负载发布到 MVC的更多信息

此外,在 dataType 选项中,您指定了返回值的类型,在您的情况下,看起来操作方法将返回 HTML,但您指定的是 JSON。

于 2013-08-22T17:44:43.083 回答
0

哇,我一知道那行不通。当您尝试在 ajax 数据中传递内部对象时,您必须在数据的根目录中严格引用内部对象属性(“innerobject.property”:值)

例子:

var dataobj =
        {
            test: 3,
            "sortInfo.property1": self.sortInfo.property1,
            /* other properties */

            "pagingInfo.TotalItems": 34, 
            //headercontainer.attr("data-pagingInfo-TotalItems"),
            "pagingInfo.ItemsPerPage": headercontainer.attr("data-pagingInfo-ItemsPerPage"),
            "pagingInfo.CurrentPage": headercontainer.attr("data-pagingInfo-CurrentPage")

        };
于 2013-08-22T17:53:46.370 回答