Как вернуть несколько переменных с помощью jsonresult asp.net mvc3

Как вернуть несколько переменных в метод JsonResult

например, я хочу вернуть две переменные:

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

Я знаю, как вернуть только одну строку:

return Json("Inserted");

Ответ 1

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

РЕДАКТИРОВАТЬ: В соответствии с комментарием "Как получить эти данные на клиенте"

Вы можете использовать getJSON для просмотра этих данных

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

Убедитесь, что в вашем представлении загружен jQuery, чтобы этот код работал.

Ответ 2

На вашем контроллере используйте что-то вроде этого:

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

Если вы используете .ajax() на своем JavaScript, вы можете использовать свои данные следующим образом:

$.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

1. Возвращение в виде коллекции внутри анонимного типа Это вызов java script/ajax и полный 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>
}

Ответ 4

Возвращает анонимный объект.

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

Обычно я делаю что-то вроде этого:

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

Итак, я могу написать свой javascript, чтобы всегда ожидать, что вызовы ajax будут возвращать данные в определенном формате.

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

Теперь вы можете делать такие вещи, как глобальный обработчик Ajax Complete, который может перехватывать такие вещи, как Redirect или WaitAndRetry, прежде чем обычный обработчик получит его, и иметь стандартный способ передачи дополнительной информации о возвращенных данных, которые являются то же самое в вашем приложении.

Ответ 5

Вы должны вернуть объект с несколькими свойствами:

return Json(new {
    result, 
    ID
});

Сериализатор JSON преобразует анонимные типы С# в литералы объектов JSON.

Ответ 6

В методе действия:

Использование нового ключевого слова

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

В поле jquery:

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

    ....
}