web-dev-qa-db-ja.com

複数のパラメーターをajaxからmvcコントローラーに渡す方法は?

コントローラ

[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() {
  }
});

これは、アクションメソッドが単一のパラメーターを予期し、ajaxから単一のパラメーターを渡すときに機能します。しかし、2つのパラメーターが必要な場合、2つのパラメーターでアクションを呼び出すことはできません。そのため、パラメーターの受け渡しにはいくつかの問題があります。コンテンツタイプの場合があります。

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を取得しています(?を/に置き換えます)

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

ここで何が欠けていますか? 2つのパラメーターを使用してajax呼び出しのルート構成を変更する必要がありますか?

16
Rasmita Dash

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)
19
vinayan

あなたは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 .......
}
12
Rush.2707

これを試して:

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/

1
malkam
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";
        }
    });

}
0
raju ranjan