如何将多个参数从ajax传递到mvc控制器?

Ras*_*ash 18 asp.net-mvc jquery asp.net-ajax

调节器

[HttpPost]
public ActionResult Save(string StrContactDetails, bool IsPrimary)
{
}

$.ajax({
  async: true,
  type: "POST",
  url: @url.Action("Helper","Save"),
  data: {
    StrContactDetails: Details,
    IsPrimary: true
  },
  //data: "StrContactDetails=" + Details + "&IsPrimary=" + true,
  //data: "{StrContactDetails:'" + Details + "',IsPrimary:"+ true + "}",
  //contentType: "application/json; charset=utf-8",
  success: function() {
  },
  error: function() {
  }
});
Run Code Online (Sandbox Code Playgroud)

这在我的action方法需要单个参数并从ajax传递单个参数时有效.但是,当它需要两个参数时,我无法使用两个参数调用该操作.因此,传递参数存在一些问题.可能是内容类型.

routes.MapRoute(
  name: "Default",
  url: "{controller}/{action}/{id}",
  defaults: new { controller = "Default", action = "Login", id = UrlParameter.Optional }
).DataTokens = new RouteValueDictionary(new { area = "MyArea" });
Run Code Online (Sandbox Code Playgroud)

.../TestProj/MyArea/Helper/Save/StrContactDetails="Test"我的行动方法如下,我可以打电话.

public ActionResult Save(string StrContactDetails)
{
  return Content("called");         
}
Run Code Online (Sandbox Code Playgroud)

.../TestProj/MyArea/Helper/SaveEmergencyContact/StrContactDetails="test"?IsPrimary=true 如果我的行动方法如下,我可以打电话.但我得到了404.../TestProj/MyArea/Helper/SaveEmergencyContact/StrContactDetails="test"/IsPrimary=true(替换?与/)

public ActionResult Save(string StrContactDetails, bool IsPrimary)
{
  return Content("called");         
}
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么?我是否需要使用2个参数为ajax调用进行路由配置更改?

vin*_*yan 21

我想你可能需要使用JSON.stringify对数据进行字符串化.

 var data = JSON.stringify({ 
                 'StrContactDetails': Details,
                 'IsPrimary':true
               });

$.ajax({
        type: "POST",
        url: @url.Action("Dhp","SaveEmergencyContact"),
        data: data,
        success: function(){},
        contentType: 'application/json'
    });
Run Code Online (Sandbox Code Playgroud)

所以控制器方法看起来像,

public ActionResult SaveEmergencyContact(string  StrContactDetails, bool IsPrimary)
Run Code Online (Sandbox Code Playgroud)


Rus*_*707 12

您可以通过不初始化url并将其写入硬编码来完成此操作

//var url = '@Url.Action("ActionName", "Controller");

$.post("/Controller/ActionName?para1=" + data + "&para2=" + data2, function (result) {
        $("#" + data).html(result);
        ............. Your code
    });
Run Code Online (Sandbox Code Playgroud)

虽然您的控制器端代码必须如下所示:

public ActionResult ActionName(string para1, string para2)
{
   Your Code .......
}
Run Code Online (Sandbox Code Playgroud)

这很简单.现在我们可以通过json传递多个数据,如下所示:

var val1= $('#btn1').val();  
var val2= $('#btn2').val(); 
$.ajax({
                    type: "GET",
                    url: '@Url.Action("Actionre", "Contr")',
                    contentType: "application/json; charset=utf-8",
                    data: { 'para1': val1, 'para2': val2 },
                    dataType: "json",
                    success: function (cities) {
                        ur code.....
                    }
                });
Run Code Online (Sandbox Code Playgroud)

虽然你的控制器端代码是相同的:

public ActionResult ActionName(string para1, string para2)
{
   Your Code .......
}
Run Code Online (Sandbox Code Playgroud)