MVC 3 Controller无法识别jQuery AJAX传回的JSON

时间:2011-07-23 22:03:51

标签: jquery asp.net-mvc json

我有一个MVC 3应用程序正在使用jQuery AJAX来启动控制器操作以返回部分视图。

客户端代码:

function getCustomerList(searchCriteria) {
    $.ajax({
        url: 'Home/GetCustomerList',
        type: 'POST',
        data: '{searchString:"' + searchCriteria + '"}',
        success: function (result) {
            $("#customerTabBody").html(result);
        }
    });
};

控制器代码:

[HttpPost]
public ActionResult GetCustomerList(string searchString)
{
    var custService = new CustomerViewModels();
    var custListVM = custService.GetSearchList(searchString);

    return PartialView("GetCustomerList", custListVM);
}

当我触发客户端jQuery时,我可以通过Firebug看到searchString正在发送并且显示格式正确。这是Firebug显示的帖子消息:

{searchString的: 'AR'}

并且Firebug能够正确解析JSON。如果我在控制器代码中放置一个断点并测试searchString参数的值是NULL。但是,如果我只是硬编码JSON:

function getCustomerList(searchCriteria) {
    $.ajax({
        url: 'Home/GetCustomerList',
        type: 'POST',
        data: {searchString:'ar'},
        success: function (result) {
            $("#customerTabBody").html(result);
        }
    });
};

它工作正常,控制器参数已正确填充。

我做错了什么,当我参数化我的JSON字符串时它会失败?

由于

1 个答案:

答案 0 :(得分:1)

试试这样:

function getCustomerList(searchCriteria) {
    $.ajax({
        url: 'Home/GetCustomerList',
        type: 'POST',
        data: { searchString: searchCriteria },
        success: function (result) {
            $('#customerTabBody').html(result);
        }
    });
}

这将确保发送到控制器的数据正确进行URL编码。此外,您还没有显示调用此getCustomerList函数的方式/位置,但如果单击某个锚点或按钮,请确保您也取消默认操作。