web-dev-qa-db-fra.com

comment renvoyer plusieurs variables avec jsonresult asp.net mvc3

Comment renvoyer plusieurs variables sur la méthode JsonResult 

par exemple, je veux renvoyer ces deux variables:

string result = "Successed";
string ID = "32"

Je sais comment renvoyer une seule chaîne:

return Json("Inserted");
12
 public ActionResult YourAction()
 {
   var result=new { Result="Successed", ID="32"};
   return Json(result, JsonRequestBehavior.AllowGet);
 }

EDIT:Selon le commentaire"Comment obtenir ces données dans le client"

Vous pouvez utiliser getJSON de la vue pour obtenir ces données comme ceci

$(function(){
   $.getJSON('YourController/YourAction', function(data) {
      alert(data.Result);
      alert(data.ID);
   });
});

Assurez-vous que jQuery est chargé dans votre vue pour que ce code fonctionne.

46
Shyju

Sur votre contrôleur, utilisez quelque chose comme ceci:

var result = new { data= stuff, data2 = otherstuff };
return Json(result, JsonRequestBehavior.AllowGet);

Si vous utilisez .ajax () sur votre JavaScript, vous pouvez utiliser vos données comme ceci:

$.ajax(
            {
                url: '/Controller/Method/',
                type: 'POST',
                data: 'data=' + data,
                success: function (result) {
                    $('#id').html("");
                    $(result.data).appendTo('#id');
                    $('#id2').html("");
                    $(result.data2).appendTo('#id2');
                    $('#id').show();
                    $('#id2').show();
                }
            });
3
m0g3

1. Retourne la collection dans le type anonyme Ceci est l'appel Java script/ajax et le code HTML complet.

< script type = "text/javascript" >
  $(document).ready(function() {
    $("#ddlProduct").hide();
    $("#ddlRegion").change(function() {
      $("#ddlProduct").show();
      $("#ddlProduct").empty();
      $.ajax({
        type: "Post",
        url: "@Url.Action("
        GetProducts ")",
        dataType: "Json",
        data: {
          id: $("#ddlRegion").val()
        },
        success: function(jsonData) {
          console.log($(jsonData).length);
          if ($(jsonData.ProductList).length == 0) {
            $("#divProduct").hide();
          } else {
            $("#divProduct").show();
          }

          $.each(jsonData.ProductList, function(i, Product) {
            $("#ddlProduct").append('<option value=" ' + Product.Value + ' ">' + Product.Text + '</option>');
          });
          if ($(jsonData.FlavourList).length == 0) {
            $("#divFlavour").hide();
          } else {
            $("#divFlavour").show();
            $.each(jsonData.FlavourList, function(i, flavour) {
              $("#ddlFlavour").append('<option value=" ' + flavour.Value + ' ">' + flavour.Text + '</option>');
            });
          }
        },
        error: function(ex) {
          alert("Failed to return Products <br/>");
        }
      });
      return false;
    })
  }); //Document Ready Ends
< /script>
@{ ViewBag.Title = "Products Drop Down Demo"; }

<h2>Products Drop Down Demo</h2>
@using (Html.BeginForm()) {
<div>@Html.Label("Select Region:")</div>
<div class="editor-field">
  @if (ViewData.ContainsKey("Region")) { @Html.DropDownList("ddlRegion", ViewData["Region"] as List
  <SelectListItem>) }
</div>
<div id="divProduct" hidden="hidden">
  <br />
  <div>
    Select a Product:
  </div>
  <div>
    @Html.DropDownList("ddlProduct", new SelectList(string.Empty, "Value", "Text"), "Please select a Product", new { style = "width:250px", @class = "dropdown1" })
  </div>
</div>
<div id="divFlavour" hidden="hidden">
  <div>
    <br />Select a Flavour:
  </div>
  <div>
    @Html.DropDownList("ddlFlavour", new SelectList(string.Empty, "Value", "Text"), "Please select a Flavour", new { style = "width:250px", @class = "dropdown1" })
  </div>
</div>
}


C'est l'action du contrôleur qui renvoie les données J'ai testé et cela fonctionne.

               public ActionResult LoadRegion()
    {
        List<SelectListItem> Regions = new List<SelectListItem>();
        Regions.Add(new SelectListItem { Text = "Select A Region", Value = "0" });
        Regions.Add(new SelectListItem { Text = "Asea", Value = "1" });
        Regions.Add(new SelectListItem { Text = "Australia", Value = "4" });
        Regions.Add(new SelectListItem { Text = "America", Value = "5" });
        Regions.Add(new SelectListItem { Text = "Europe", Value = "6" });
        ViewData["Region"] = Regions;
        return View();
    }

public JsonResult GetProducts (id de chaîne) { Liste des produits = nouvelle liste (); Liste des saveurs = new List ();

        products.Add(new SelectListItem { Text = "Select Product", Value = "0" });
        products.Add(new SelectListItem { Text = "Cheese", Value = "1" });
        products.Add(new SelectListItem { Text = "Sause", Value = "2" });
        products.Add(new SelectListItem { Text = "Veberage", Value = "3" });
        products.Add(new SelectListItem { Text = "Snacks", Value = "4" });

        flavours.Add(new SelectListItem { Text = "Select Flavour", Value = "0", Selected = true });
        flavours.Add(new SelectListItem { Text = "Sweet", Value = "1" });
        flavours.Add(new SelectListItem { Text = "Sour", Value = "2" });
        flavours.Add(new SelectListItem { Text = "Spicy", Value = "3" });

        var myResult = new
        {
            ProductList = products,
            FlavourList = flavours
        };
        return Json(myResult, JsonRequestBehavior.AllowGet);

}

Faites-moi savoir si vous rencontrez un problème avec l'exécution de ce code . Merci Premjeet

2
user2449131

Renvoie un objet anonyme.

return Json( new { Result = result, Id = ID } );

Je fais normalement quelque chose comme ça:

public enum NoticeTypes
{
    Default,
    UpdateComplete,
    ResponsePending,
    Notice,
    Error,
    Redirect,
    WaitAndRetryAttempt
}
public class AjaxJsonResponse
{
    public UserNotice Notice { get; set; }
    public object Data { get; set; }
    private AjaxJsonResponse() { }
    public static JsonResult Create(UserNotice Notice,object Data)
    {
        return new JsonResult()
        { 
            Data = new 
            { 
                Notice = Notice,
                Data = Data
            } 
        };
    }
}

Pour pouvoir écrire mon code javascript, je m'attends toujours à ce que les appels ajax renvoient des données dans un certain format.

return AjaxResponse.Create(NoticeTypes.UpdateComplete, new 
{ 
    Result = result, 
    Id = ID 
});

Vous pouvez désormais utiliser un gestionnaire global Ajax Complete capable d'intercepter des éléments tels que Redirect ou WaitAndRetry avant que le gestionnaire normal ne l'ait obtenu, et disposer d'un moyen standard de communiquer des informations supplémentaires sur les données renvoyées identiques dans votre application.

1
asawyer

En méthode d'action:

Utiliser un nouveau mot clé 

var genericResult = new { homeworkData = homework, attachmentData = homeworkAttachment };
var result = this.Json(genericResult, JsonRequestBehavior.AllowGet);
return result;

Côté jquery:

function getHomewrokDetailResponse(dataSent, result) {
if (result && result.homeworkData) {
    homeworkId = result.homeworkData.DASH_EMPLOYEE_HOMEWORK_ID;

    ....
}
1
Rajdeep

Vous devriez retourner un objet avec plusieurs propriétés:

return Json(new {
    result, 
    ID
});

Le sérialiseur JSON convertira les types anonymes C # en littéraux d'objet JSON.

0
SLaks