gpt4 book ai didi

javascript - Jquery序列化: trying to pass a form status to an ASP. NET MVC Controller 而不提交表单

转载 作者:行者123 更新时间:2023-11-30 16:18:30 25 4
gpt4 key购买 nike

正在处理 ASP.NET MVC 应用程序。一个表单有几个提交表单的按钮。其中一个按钮需要在不提交表单的情况下向 Controller 发送表单的控件状态。我打算使用 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);
}
});
}

我的 Controller 操作如下:

public ActionResult Search(FormCollection improItem)
{
}

如果我以这种方式调用 ajax,它永远不会到达 Controller (因此会触发错误函数。

如果我评论这一行:

data: formStatus ,

然后它会调用 Controller 方法,但 FormCollection improItem 参数当然没有值。所以我想我没有将数据正确传递给 Ajax,但我没有设法对其进行排序。

提前致谢。

最佳答案

确保您指定了正确的内容类型。现在你似乎已经指定了 application/json; charset=utf-8 但显然你没有发送任何 JSON 而是 application/x-www-form-urlencoded 这就是 .serialize() 方法将格式化表单值。所以只要去掉这一行:

contentType: "application/json; charset=utf-8",

通常当你不确定你正在发送或接收什么而不是像你那样尝试明确指定它时,你最好不要指定任何东西并让 jQuery 自己解决。 dataType: 'json', 属性当然也是如此。如果您的 Controller 操作不返回 JSON,则会导致错误。另一方面,如果您没有指定预期的返回类型,那么 jQuery 将简单地使用服务器返回的 Content-Type 响应 header ,并且它会计算出来。

所以底线是:除非您确切地知道自己在做什么,否则请将其留给框架来解决。

啊,在我忘记之前,请替换为:

public ActionResult Search(FormCollection improItem)

与:

public ActionResult Search(MyViewModel improItem)

关于javascript - Jquery序列化: trying to pass a form status to an ASP. NET MVC Controller 而不提交表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35116490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com