【问题标题】:Ajax Call to Controller with multiple parameters带有多个参数的 Ajax 调用控制器
【发布时间】:2016-03-22 06:27:41
【问题描述】:
$.ajax({
    type: 'POST',
    url: '@Url.Action("AccountUpdate", "Customer")',
    async: false,
    data: { a:"ed", formCollection: $("#form1").serialize() }
});

控制器:-

public void AccountUpdate(string a, FormCollection formCollection) {}

问题:- 在控制器 AccountUpdate 中,我得到参数 a ="ed",这很好。 但是在 FormCollection 对象中,我得到了 formCollection 对象 以及 'a' 对象 为什么表单集合对象接收“a”对象?它应该只是 formCollection 对象

【问题讨论】:

  • 因为你的参数是 typeof FormCollection 是所有提交数据的集合。将其替换为YourModel formCollection 其中YourModel 是您在视图中使用的模型。
  • 所以我将控制器的参数更改为 public void AccountUpdate(string a, Customer formCollection) {} Ajax 没有变化,现在我在 formCollection 中得到 null ?
  • 另外我读到的是 formCollection 只包含那些在 form 范围内的元素,“a”没有在 form 范围内定义
  • 因为您的 ajax data 选项不正确。首先使用data: $("#form1").serialize(), 确保您的模型正确绑定,然后我将向您展示如何发回附加参数
  • 我以前只使用 data: $("#form1").serialize() 时这样做过,效果很好

标签: jquery asp.net-mvc


【解决方案1】:

您的 POST 方法的参数是 typeof FormCollection,它是一个包含所有提交的键/值对的类。

改变你的方法

[HttpPost]
public void AccountUpdate(string a, Customer model)

并更改您的脚本以允许在方法中提交和绑定您的模型和附加值

var data = $("#form1").serialize() + '&' + $.param({ 'a': 'ed'});

$.ajax({
    type: 'POST',
    url: '@Url.Action("AccountUpdate", "Customer")',
    data: data
});

【讨论】:

  • 谢谢 LeftyX 和 Stephen Muecke。 Stephen Muecke 您的代码现在运行良好,
【解决方案2】:
data: $("#form1").serialize() 

是要走的路。

如果你想添加一些额外的参数:

$.ajax({
    type: 'POST',
    url: '@Url.Action("AccountUpdate", "Customer")',
    // async: false,
    data: "a=ed&" + $("form1").serialize()
});

这样你可以直接绑定到你的视图模型:

[HttpPost]
public ActionResult Index(string a, Customer customer)
{
    ...
}

【讨论】:

  • 感谢 Lefty,但现在客户对象为空 这是我的元素,格式为
猜你喜欢
  • 2020-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-10
  • 2019-10-23
  • 1970-01-01
相关资源
最近更新 更多