Подтвердить что ты не робот

Как вернуть объект Json из MVC-контроллера для просмотра

Я делаю приложение MVC, где мне нужно передать объект json из контроллера для просмотра.

var dictionary = listLocation.ToDictionary(x => x.label, x => x.value);
return Json(new { values = listLocation}, JsonRequestBehavior.AllowGet);

Вышеприведенный код, который я использую в своем контроллере, теперь, когда я разворачиваю страницу просмотра, открываю диалоговое окно загрузки в своем браузере, открывая файл, он дает мне json-объект, поскольку мне нужен формат.

Теперь я хочу вернуться на страницу просмотра, также хочу получить доступ к объекту json на странице просмотра. как я могу это сделать.

4b9b3361

Ответ 1

Когда вы выполняете return Json(...), вы конкретно указываете MVC не использовать представление и обслуживать сериализованные данные JSON. Ваш браузер открывает диалоговое окно загрузки, потому что он не знает, что делать с этими данными.

Если вы хотите вернуть представление, просто сделайте return View(...), как обычно:

var dictionary = listLocation.ToDictionary(x => x.label, x => x.value);
return View(new { Values = listLocation });

Тогда, на ваш взгляд, просто закодируйте свои данные как JSON и назначьте его переменной JavaScript:

<script>
    var values = @Html.Raw(Json.Encode(Model.Values));
</script>

ИЗМЕНИТЬ

Вот немного более полный образец. Поскольку у меня недостаточно контекста, в этом примере будет использоваться контроллер Foo, действие Bar и модель представления FooBarModel. Кроме того, список местоположений жестко закодирован:

Контроллеры /FooController.cs

public class FooController : Controller
{
    public ActionResult Bar()
    {
        var locations = new[]
        {
            new SelectListItem { Value = "US", Text = "United States" },
            new SelectListItem { Value = "CA", Text = "Canada" },
            new SelectListItem { Value = "MX", Text = "Mexico" },
        };

        var model = new FooBarModel
        {
            Locations = locations,
        };

        return View(model);
    }
}

Модели /FooBarModel.cs

public class FooBarModel
{
    public IEnumerable<SelectListItem> Locations { get; set; }
}

Views/Foo/Bar.cshtml

@model MyApp.Models.FooBarModel

<script>
    var locations = @Html.Raw(Json.Encode(Model.Locations));
</script>

По внешнему виду вашего сообщения об ошибке кажется, что вы смешиваете несовместимые типы (т.е. Ported_LI.Models.Locatio‌​n и MyApp.Models.Location), поэтому, чтобы повторить, убедитесь, что тип, отправленный из стороны действия контроллера, соответствует тому, что получено из Посмотреть. Для этого образца, в частности, new FooBarModel в контроллере соответствует @model MyApp.Models.FooBarModel в представлении.

Ответ 2

Вы можете использовать AJAX для вызова этого действия контроллера. Например, если вы используете jQuery, вы можете использовать метод $.ajax():

<script type="text/javascript">
    $.ajax({
        url: '@Url.Action("NameOfYourAction")',
        type: 'GET',
        cache: false,
        success: function(result) {
            // you could use the result.values dictionary here
        }
    });
</script>

Ответ 3

<script type="text/javascript">
jQuery(function () {
    var container = jQuery("\#content");
    jQuery(container)
     .kendoGrid({
         selectable: "single row",
         dataSource: new kendo.data.DataSource({
             transport: {
                 read: {
                     url: "@Url.Action("GetMsgDetails", "OutMessage")" + "?msgId=" + msgId,
                     dataType: "json",
                 },
             },
             batch: true,
         }),
         editable: "popup",
         columns: [
            { field: "Id", title: "Id", width: 250, hidden: true },
            { field: "Data", title: "Message Body", width: 100 },
           { field: "mobile", title: "Mobile Number", width: 100 },
         ]
     });
});

Ответ 4

$.ajax({
    dataType: "json",
    type: "POST",
    url: "/Home/AutocompleteID",
    data: data,
    success: function (data) {
        $('#search').html('');
        $('#search').append(data[0].Scheme_Code);
        $('#search').append(data[0].Scheme_Name);
    }
});