我有这个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);
}
我在尝试解析查询字符串的行上收到一个空指针,我不知道为什么。有什么帮助吗?
答案 0 :(得分:2)
我在项目中有同样的事情ajax唯一不同的是我没有使用 dataType 但 contentType:" application / json;字符集= UTF-8" 强>
data: "{'query' : '" + $appForm + "'}"
答案 1 :(得分:1)
这一位:
$appForm.serialize();
返回您从未使用过的string
。 serialize
实际上不会修改表单。你应该将它分配给一个变量并改为传递它:
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',
...