我使用ASP.NET MVC3,AJAX和JQUERY时遇到了问题。我有以下功能
[HttpPost]
public bool Update(int id, FormCollection collection)
这是我的jQuery来源:
$(document).ready(function () {
$('#btnUpdate').click(function (e) {
// Cancel default action
e.preventDefault();
var formCollection = $('#formId').serialize();
$.ajax({
cache: false,
type: 'POST',
url: '@Url.Action("Action","Controller")',
data: { id: $('#id').val(), collection: formCollection },
success: function (data) {
alert(data);
},
error: function (xhr, ajaxOptions, thrownError) {
alert('Error during process: \n' + xhr.responseText);
}
});
});
});
id参数已成功提交,但集合(FormCollection)包含一个{[0]:10000,[1]:collection}的数组。我无法解决问题。当我重新设计这样的解决方案时:
[HttpPost]
public bool Update(FormCollection collection)
$(document).ready(function () {
$('#btnUpdate').click(function (e) {
// Cancel default action
e.preventDefault();
$.ajax({
cache: false,
type: 'POST',
url: '@Url.Action("Action", "Controller")',
data: $('#formId').serialize(),
success: function (data) {
alert(data);
},
error: function (xhr, ajaxOptions, thrownError) {
alert('Error during process: \n' + xhr.responseText);
}
});
});
});
一切正常。我在传递2个参数时做错了什么?
THX !!!
答案 0 :(得分:1)
尝试在JSON上调用JSON.stringify():
data: JSON.stringify({ id: $('#id').val(), collection: formCollection })
答案 1 :(得分:1)
$(document).ready(function () {
$('#btnUpdate').click(function (e) {
// Cancel default action
e.preventDefault();
var formCollection = $('#formId').serialize();
$.ajax({
cache: false,
type: 'POST',
url: '@Url.Action("Action","Controller")',
data: JSON.stringify({ id: $('#id').val(), collection: formCollection }),
success: function (data) {
alert(data);
},
error: function (xhr, ajaxOptions, thrownError) {
alert('Error during process: \n' + xhr.responseText);
}
});
});
});
你应该用jsonstringify
传递数据答案 2 :(得分:0)
这是实际的手表:
成功提交参数ID(Name = id,Wert = 10000)。在id之上你可以看到formCollection,包括ajax调用的FORM.serialize()值。但System.Web.Mvc.FormCollection仅包括两个键: id 和集合!我期待
我认为如果在创建我的ajax请求时出错,但我不知道为什么......
var customerNo = $('#fieldID').val();
var formCollection = $('#formID').serialize();
$.ajax({
cache: false,
type: 'POST',
url: '@Url.Action("Action", "Controller")',
data: { id: customerNo, collection: formCollection },
dataType: 'json',
success: function (data) {
if (data) {
alert(data);
};
},
error: function (xhr, ajaxOptions, thrownError) {
alert('Error during process: \n' + xhr.responseText);
}
});
以下行生成错误:
data: JSON.stringify({ id: customerNo, collection: formCollection })
参数字典包含非可空类型'System.Int32'的空条目“id”...
更改无效:
data: { id: customerNo, collection: JSON.stringify(formCollection) },
有什么想法吗?
答案 3 :(得分:0)
这是我的想法(有效!)
从模型中添加一个字符串属性的部分类,在“数据”中手动添加此属性。
<强> JS:强>
$.ajax({
cache: false,
type: 'POST',
url: '@Url.Action("Action", "Controller")',
data: $("form").serialize() + "&id=whatever",
dataType: 'json',
success: function (data) {
if (data) {
alert(data);
};
},
error: function (xhr, ajaxOptions, thrownError) {
alert('Error during process: \n' + xhr.responseText);
}
});
partialClass.cs模型:
public partial class TableName
{
public string id { get; set; }
}
<强>控制器:强>
[HttpPost]
public bool Update(FormCollection collection){
var ID = collection.id;
}
问候!