ASP.NET MVC - вернуть объект JSON в представление и «отформатировать как таблицу». - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть представление, разработанное другим разработчиком, в котором уже есть код для javascript, который должен обрабатывать объект JSON и форматировать его как таблицу HTML.

Я новичок в MVC, ииз контроллера я создаю объект JSON, который содержит то, что мне нужно.Проблема в том, что из моего контроллера, если я просто возвращаю объект JSON, браузер просто показывает необработанную строку JSON клиенту.Кажется, что когда я возвращаю объект JSON, браузер просто показывает JSON, фактически не вызывая мое представление, содержащее код для обработки JSON, и делая его удобным для пользователя.

Это мой контроллер:

        public JsonResult GetPlayerNameByID(int playerID)
        {
            var player = GetPlayerByID(playerID);

            return Json(player, JsonRequestBehavior.AllowGet);
        }

Это вызывается через событие щелчка раскрывающегося списка.Представление для этой страницы выглядит следующим образом:

@model FirstApp.Models.PlayerViewModel

<div id="container" class="container">
    <table class="table player">
        <thead>
            <tr>
                <th class="Name">Name</th>
                <th class="Overall">Overall</th>
            </tr>
        </thead>
        <tbody id="tableBody"></tbody>
    </table>

Я считаю, что моя проблема в том, что контроллер не возвращается к этому представлению, а просто к необработанному объекту JSON.Любое предложение о том, как я могу вернуться к этому представлению (это представление, с которого был сделан вызов).

1 Ответ

1 голос
/ 28 сентября 2019

Чтобы вернуть представление, необходимо вернуть представление.Что-то вроде:

return View();

Или, если нужно включить модель:

return View(someModel);

Но ваше действие контроллера просто возвращает данные JSON:

return Json(player, JsonRequestBehavior.AllowGet);

Вы не можете вернуть оба .Похоже, у вас есть два варианта:

  1. Возвращать вид с объектом player в качестве модели.В этом случае представление будет визуализировать данные из модели напрямую, и не будет необходимости в JSON или какой-либо связи с JavaScript.(Ну, может быть , в зависимости от вашего взгляда и того, что вам нужно делать. Но это не будет на уровне контроллера.)
  2. Выполните два действия контроллера.Один, который возвращает представление, другой, который возвращает данные JSON.Код JavaScript на стороне клиента отправляет AJAX-запрос ко второму действию для извлечения данных JSON.

Какой из них вы выбираете, зависит от вас.Но в конечном итоге вы не можете вернуть и представление и необработанный JSON из одного действия.

Чтобы привести пример второго варианта, у вас будет два действия:

public ViewResult Player(int playerID)
{
    return View(playerID);
}

public JsonResult GetPlayerNameByID(int playerID)
{
    var player = GetPlayerByID(playerID);

    return Json(player, JsonRequestBehavior.AllowGet);
}

Первый метод вернет ваше представление Player (при условии, что оно у вас есть), с целым числомкак модель.Таким образом, представление будет начинаться с объявления для этого типа модели:

@model int

Это означает, что внутри кода представления вы сможете получить доступ к playerID в переменной Model.Таким образом, в JavaScript-коде представления вы можете записать это в переменную:

let playerID = @Model;

Что, если, например, значение playerID было 123, это вывело бы на стороне клиента как:

let playerID = 123;

Оттуда вы будете использовать AJAX для запроса @Url.Action("GetPlayerNameByID") для получения данных JSON.То, как вы это сделаете, будет зависеть от того, какие фреймворки / библиотеки JavaScript вы используете, если таковые имеются, и в Интернете доступно множество примеров того, как использовать AJAX в различных фреймворках и в ASP.NET.

...