Jquery 序列化 :尝试在不提交表单的情况下将表单状态传递给 ASP.NET MVC 控制器
本文关键字:表单 状态 ASP 控制器 MVC NET 序列化 Jquery 提交 情况下 | 更新日期: 2023-09-27 18:32:42
正在开发一个 ASP.NET 的MVC应用程序。表单具有多个提交表单的按钮。其中一个按钮需要将窗体的控件状态发送到控制器,而无需提交窗体。我计划使用 Ajax 和 $('#FormID').serialize();
我是这样写的:
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,但我无法对其进行排序。
提前感谢。
请确保指定正确的内容类型。现在您似乎已经指定了application/json; charset=utf-8
但显然您没有发送任何 JSON,而是application/x-www-form-urlencoded
这就是 .serialize()
方法格式化表单值的方式。所以只需摆脱这一行:
contentType: "application/json; charset=utf-8",
通常,当您不确定要发送或接收的内容而不是像您那样尝试显式指定它时,您最好不要指定任何内容并让jQuery弄清楚。当然,dataType: 'json',
财产也是如此。如果控制器操作未返回 JSON,这将导致错误。另一方面,如果您没有指定预期的返回类型,那么 jQuery 将只使用服务器返回的 Content-Type
响应标头,它会弄清楚。
所以底线:把它留给框架弄清楚,除非你确切地知道你在做什么。
啊,在我忘记之前,请替换这个:
public ActionResult Search(FormCollection improItem)
跟:
public ActionResult Search(MyViewModel improItem)