Ajax查询字符串未发布到ASP.NET控制器

时间:2015-06-10 15:22:06

标签: javascript c# ajax asp.net-mvc

我有这个Ajax功能:

UpdateFIConfig: function ($appForm) {

    var valid = $appForm.valid();
    //if not valid the validate plugin will take care of the errors
    if (valid) {

        $appForm.serialize();
        $.ajax({
            url: '/IdentifiConfig/DefaultConfiguration/UpdateFIConfig',
            data: $appForm,
            dataType: 'application/json',
            cache: false,
            type: 'POST',
            success: function (data) {
                if (data.Error) {
                    cc.jqUtils.openDialog(data.ErrorDescription, 'Error', 'OK', null, null, null);
                } else {
                    window.location.href = '/IdentifiConfig/DefaultConfiguration';
                }
            }
        });

    }
},

将从我的视图发送的数据序列化为查询字符串。我知道数据是正确序列化的,因为我用console.log($appForm)查看了字符串,这是正确的。

但是,我的控制器永远不会收到查询字符串。我删除了很多代码,但这基本上就是控制器函数的样子:

 [HttpPost]
 public ActionResult UpdateFIConfig(string query)
 {
     NameValueCollection nvc = HttpUtility.ParseQueryString(query);

     System.Diagnostics.Debug.WriteLine(nvc);
 }

我在尝试解析查询字符串的行上收到一个空指针,我不知道为什么。有什么帮助吗?

3 个答案:

答案 0 :(得分:2)

我在项目中有同样的事情ajax唯一不同的是我没有使用 dataType contentType:" application / json;字符集= UTF-8"

data: "{'query' : '" + $appForm + "'}"

答案 1 :(得分:1)

这一位:

$appForm.serialize();

返回您从未使用过的stringserialize实际上不会修改表单。你应该将它分配给一个变量并改为传递它:

var data = $appForm.serialize();

$.ajax({
    url: '/IdentifiConfig/DefaultConfiguration/UpdateFIConfig',
    data: data,
    /* etc */
});

答案 2 :(得分:0)

可能有更好的方法,但我通过接受带有字符串属性的Object而不仅仅是字符串来解决这个烦恼。所以做一些像:

 [HttpPost]
 public ActionResult UpdateFIConfig(MyTypeWithQry query)
 { ...

    $.ajax({ url: '/IdentifiConfig/DefaultConfiguration/UpdateFIConfig',
             data: { 'query' : $appForm },
             dataType: 'application/json',
...