如何从ajax调用中传递多个参数到MVC控制器
如何从ajax调用中传递多个参数到MVC控制器
我有一个如下所示的控制器:
public ActionResult Save(string input, string name) { //一些代码 return PartialView(); }
我需要一个ajax调用这个控制器方法并传递两个参数input和name
我的ajax调用如下所示:
$.ajax({ url: '/Home/Save', type: 'POST', async: false, dataType: 'text', processData: false, data: "input=" + JSON.stringify(data) + "&name =" + $("#name").val(), success: function (data) { } });
我无法将值传递给name参数。name参数中的值变成了null。
问题的出现原因是作者想要通过Ajax调用将多个参数传递给MVC控制器,但不知道如何实现。解决方法是使用一个名为getUrlVars()的函数来获取URL中的查询字符串参数,并将其作为关联数组返回。然后,在Ajax调用中使用这个函数来传递参数。
具体步骤如下:
1. 首先,需要在页面中定义一个名为getUrlVars()的函数,该函数用于获取URL中的查询字符串参数,并将其返回为关联数组。
2. 在Ajax调用中,设置url属性为控制器的路径。
3. 将type属性设置为GET,表示使用GET方法发送请求。
4. 将dataType属性设置为json,表示预期从服务器接收JSON数据。
5. 将data属性设置为getUrlVars(),这样就可以将查询字符串参数作为参数传递给控制器。
这样就完成了通过Ajax调用将多个参数传递给MVC控制器的过程。如果想了解如何使用getUrlVars()函数或者如何不发送所有查询字符串参数到控制器,可以参考提供的链接。
问题的原因是:在进行HTTP POST请求时,尝试使用GET查询字符串语法传递参数。在POST请求中,数据作为命名参数传递,并不使用param=value&foo=bar
的语法。使用jQuery的ajax方法可以创建一个带有命名参数的JavaScript对象,如下所示:
解决方法如下所示:
$.ajax({ url: '/Home/SaveChart', type: 'POST', async: false, dataType: 'text', processData: false, data: { input: JSON.stringify(IVRInstant.data), name: $("#wrkname").val() }, success: function (data) { } });
我认为,默认情况下,使用POST方法提交的表单将在消息体中提交URI字符串。
问题的出现原因:在ajax调用中,需要将多个参数传递给MVC控制器,但是无法直接在ajax的data属性中传递多个参数。
解决方法:创建一个数据对象,并在ajax调用中使用该对象来传递参数。
具体步骤如下:
1. 在ajax调用之前,创建一个数据对象。可以使用JSON.stringify方法将多个参数封装成一个JSON对象。
var dataObject = JSON.stringify({ 'input': $('#myInput').val(), 'name': $('#myName').val(), });
2. 在ajax调用中使用该数据对象作为data属性的值。
$.ajax({ url: "/Home/SaveChart", type: 'POST', async: false, dataType: 'json', contentType: 'application/json', data: dataObject, success: function (data) { }, error: function (xhr) { } });
通过以上步骤,我们可以将多个参数成功传递给MVC控制器。