web-dev-qa-db-fra.com

Comment passer plusieurs paramètres d'ajax au contrôleur mvc?

Manette

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

Cela fonctionne lorsque ma méthode d'action attend un seul paramètre et que je le passe de ajax. Mais, je ne peux pas appeler l'action avec deux paramètres quand elle attend deux paramètres. Donc, il y a un problème en passant des paramètres. Peut être contenu Type.

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

Je peux appeler .../TestProj/MyArea/Helper/Save/StrContactDetails="Test" lorsque ma méthode d'action est la suivante.

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

Je peux appeler .../TestProj/MyArea/Helper/SaveEmergencyContact/StrContactDetails="test"?IsPrimary=true si ma méthode d'action est la suivante. Mais je reçois 404 pour .../TestProj/MyArea/Helper/SaveEmergencyContact/StrContactDetails="test"/IsPrimary=true (remplacer? Par /)

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

Qu'est-ce qui me manque ici? Dois-je modifier la configuration de la route pour un appel ajax avec 2 paramètres?

14
Rasmita Dash

Je pense que vous devrez peut-être hiérarchiser les données à l'aide de 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'
    });

Donc, la méthode du contrôleur ressemblerait,

public ActionResult SaveEmergencyContact(string  StrContactDetails, bool IsPrimary)
17
vinayan

Vous pouvez le faire en n’initialisant pas l’URL et en l’écrivant sur un hardcode comme ceci

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

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

Alors que votre code côté contrôleur doit être comme ci-dessous:

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

c'était simple. maintenant nous pouvons faire passer plusieurs données par json aussi comme ceci:

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.....
                    }
                });

Alors que votre code côté contrôleur sera le même:

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

Essaye ça:

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