web-dev-qa-db-de.com

so geben Sie mehrere Variablen mit jsonresult asp.net mvc3 zurück

Zurückgeben mehrerer Variablen für die JsonResult-Methode 

zum Beispiel möchte ich diese zwei Variablen zurückgeben:

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

Ich kann nur eine Zeichenfolge zurückgeben:

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

EDIT:Laut Kommentar"Wie bekomme ich diese Daten im Client?"

Sie können getJSON aus der Sicht verwenden, um diese Daten so zu erhalten

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

Stellen Sie sicher, dass Sie jQuery in Ihrer Ansicht geladen haben, damit dieser Code funktioniert.

46
Shyju

Verwenden Sie auf Ihrem Controller etwa Folgendes:

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

Wenn Sie .ajax () in Ihrem JavaScript verwenden, können Sie Ihre Daten wie folgt verwenden:

$.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. Rückgabe als Sammlung innerhalb eines anonymen Typs Dies ist der Java-Skript/ajax-Aufruf und die vollständige HTML.

< 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>
}


Dies ist die Controller-Aktion, die die Daten zurückgibt Ich habe es getestet und es funktioniert.

               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 (Zeichenfolge-ID) { Listenprodukte = neue Liste (); Listenvarianten = neue Liste ();

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

}

Lassen Sie mich wissen, wenn Sie Probleme mit diesem Code haben . Danke Premjeet

2
user2449131

Rückgabe eines anonymen Objekts.

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

Normalerweise mache ich so etwas:

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

Damit ich mein Javascript schreiben kann, um zu erwarten, dass Ajax-Aufrufe immer Daten in einem bestimmten Format zurückgeben.

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

Jetzt können Sie Dinge wie einen globalen Ajax Complete-Handler ausführen, der Dinge wie Redirect oder WaitAndRetry abfangen kann, bevor der normale Handler es erhält, und eine Standardmethode haben, um zusätzliche Informationen über die zurückgegebenen Daten zu übermitteln, die in Ihrer Anwendung gleich sind.

1
asawyer

In Aktion Methode:

Neues Keyword verwenden 

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

In jquery Seite:

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

    ....
}
1
Rajdeep

Sie sollten ein Objekt mit mehreren Eigenschaften zurückgeben:

return Json(new {
    result, 
    ID
});

Der JSON-Serialisierer konvertiert anonyme C # -Typen in JSON-Objektliterale.

0
SLaks