Javascript Jquery serialize:尝试在不提交表单的情况下将表单状态传递给ASP.NET MVC控制器
正在使用ASP.NET MVC应用程序。 一个表单有几个提交表单的按钮。 其中一个按钮需要在不提交表单的情况下向控制器发送表单的控件状态。 我计划使用Ajax和$('#FormID').serialize() 我是这样写的:Javascript Jquery serialize:尝试在不提交表单的情况下将表单状态传递给ASP.NET MVC控制器,javascript,c#,jquery,ajax,asp.net-mvc,Javascript,C#,Jquery,Ajax,Asp.net Mvc,正在使用ASP.NET MVC应用程序。 一个表单有几个提交表单的按钮。 其中一个按钮需要在不提交表单的情况下向控制器发送表单的控件状态。 我计划使用Ajax和$('#FormID').serialize() 我是这样写的: function rechercher() { var formStatus = $('#FormID').serialize(); var url = '@Url.Action("Search", "ImproItemForm");
function rechercher() {
var formStatus = $('#FormID').serialize();
var url = '@Url.Action("Search", "ImproItemForm"); //?'+ formStatus;
// alert('formStatus: ' + formStatus); //works fine
alert('url: ' + url);
$.ajax({
url: url,
type: 'POST',
dataType: 'json',
data:/* { improItem: formStatus },*/ formStatus ,
contentType: "application/json; charset=utf-8",
success: function (result) {
alert("success" + result);
},
error: function (result) {
alert("failure" + result);
}
});
}
我的控制器操作如下:
public ActionResult Search(FormCollection improItem)
{
}
如果我这样调用ajax,它永远不会到达控制器(从而触发错误函数)
如果我评论这一行:
data: formStatus ,
然后它调用控制器方法,但是FormCollection improItem参数当然没有值。
因此,我假设我没有将数据正确地传递给Ajax,但我没有成功地对其进行排序
提前发送thx。确保指定正确的内容类型。现在您似乎已经指定了
application/json;charset=utf-8
,但显然您没有发送任何json,而是发送application/x-www-form-urlencoded
,这就是序列化()的方式
方法将格式化表单值。因此只需去掉这一行:
contentType: "application/json; charset=utf-8",
通常,当您不确定发送或接收的内容时,而不是像以前那样尝试显式地指定它,您最好不要指定任何内容,让jQuery来解决。当然,dataType:'json',
属性也是如此。如果您的控制器操作没有返回json,这将导致错误。另一方面,如果您没有指定预期的返回类型,那么jQuery将只使用服务器返回的内容类型
响应头,它将找到它
所以,底线是:让框架来解决问题,除非你确切知道自己在做什么
啊,在我忘记之前,请替换这个:
public ActionResult Search(FormCollection improItem)
与:
英明!!非常感谢达林:)
public ActionResult Search(MyViewModel improItem)