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

时间:2015-02-04 08:06:32

标签: jquery asp.net-mvc 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() {
  }
});

当我的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" });

当我的操作方法如下时,我可以致电.../TestProj/MyArea/Helper/Save/StrContactDetails="Test"

public ActionResult Save(string StrContactDetails)
{
  return Content("called");         
}

如果我的操作方法如下,我可以致电.../TestProj/MyArea/Helper/SaveEmergencyContact/StrContactDetails="test"?IsPrimary=true。但是我为.../TestProj/MyArea/Helper/SaveEmergencyContact/StrContactDetails="test"/IsPrimary=true获得404(替换?with /)

public ActionResult Save(string StrContactDetails, bool IsPrimary)
{
  return Content("called");         
}

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

6 个答案:

答案 0 :(得分:17)

我认为您可能需要使用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'
    });

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

public ActionResult SaveEmergencyContact(string  StrContactDetails, bool IsPrimary)

答案 1 :(得分:11)

你可以通过不初始化url并将其写入硬件代码(如

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

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

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

public ActionResult ActionName(string para1, string para2)
{
   Your Code .......
}
这是一种简单的方法。现在我们可以通过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.....
                    }
                });

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

public ActionResult ActionName(string para1, string para2)
{
   Your Code .......
}

答案 2 :(得分:2)

试试这个;

function X (id,parameter1,parameter2,...) {
    $.ajax({

            url: '@Url.Action("Actionre", "controller")',+ id,
            type: "Get",
            data: { parameter1: parameter1, parameter2: parameter2,...}

    }).done(function(result) {

        your code...
    });
}

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

public ActionResult ActionName(id,parameter1, parameter2,...)
{
   Your Code .......
}

答案 3 :(得分:1)

试试这个:

var req={StrContactDetails:'data',IsPrimary:'True'}

$.ajax({
                   type: 'POST',
                   data: req,
                   url: '@url.Action("SaveEmergencyContact","Dhp")',
                   contentType: "application/json; charset=utf-8",
                   dataType: "json",
                   data: JSON.stringify(req),
                   success: function (data) {
                       alert("Success");
                   },
                   error: function (ob, errStr) {
                       alert("An error occured.Please try after sometime.");
                   }
               });

http://api.jquery.com/jquery.ajax/

答案 4 :(得分:0)

function toggleCheck(employeeId) {
    var data =  'referenceid= '+ employeeId +'&referencestatus=' 1;
    console.log(data);
    $.ajax({
        type : 'POST',
        url : 'edit',
        data : data,
        cache: false,
        async : false,
        success : function(employeeId) {
            alert("Success");
            window.redirect = "Users.jsp";
        }
    });

}

答案 5 :(得分:0)

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