Как передать данные из контроллера для просмотра во время вызова JQuery AJAX в MVC? - PullRequest
1 голос
/ 22 апреля 2020

На мой взгляд, у меня есть вызов AJAX, который отправляет параметр id на мой контроллер. Этот бит отлично работает. В моем контроллере я планирую запрашивать базу данных с этим идентификатором, извлекать связанные данные и хочу отправить их обратно в AJAX вызов / представление. Это бит, с которым я борюсь, поскольку я новичок в AJAX вызовах.

var chosenSchoolID = $("#SelectedSchoolId").val();

$.ajax({
  url: "/Home/GetSchoolDetailsAJAX",
  type: "POST",
  data: {
    schoolID: chosenSchoolID
  },
  dataType: "text",
  success: function(data) {
    if (data == "success") {

    }
  },
  error: function(data) {
    if (data == "failed")
      alert("An error has occured!");
  }
});

Выше приведен мой AJAX вызов, и это действительно ударил по моему методу контроллера. Однако в моем контроллере я хочу отправить обратно другие строковые данные, и я не уверен, как это сделать (в настоящее время используется только код заполнителя)

[HttpPost]
public ActionResult GetSchoolDetailsAjax(string schoolID)
{
  // query database using schoolID
  // now we have other data such as:
  string SchoolName = "";
  string SchoolAddress = "";
  string SchoolCity = "";
  return null;
}

Должен ли я объявлять переменные в моем Jquery и передавать в параметр данных вызова AJAX для передачи значений?

Заранее большое спасибо

1 Ответ

1 голос
/ 22 апреля 2020

Самый простой способ сделать это - вернуть сущности, извлеченные из вашей базы данных, используя return Json() из вашего контроллера.

Обратите внимание, что при получении данных должен быть сделан запрос GET, а не POST. Кроме того, в конфигурации MVC по умолчанию должны быть настроены маршруты, чтобы вы могли предоставить id требуемого ресурса в URL. Поэтому попробуйте следующее:

$.ajax({
  url: "/Home/GetSchoolDetailsAJAX/" + $("#SelectedSchoolId").val(),
  type: "get",
  success: function(school) {
    console.log(school);
  },
  error: function() {
    alert("An error has occured!");
  }
});
[HttpGet]
public ActionResult GetSchoolDetailsAjax(string id) {
  var school = _yourDatabaseContext.Schools.Single(s => s.Id == id); // assuming EF
  return Json(school);
}

Если вы хотите проверить это без интеграции с базой данных, измените следующую строку:

var school = new {
  Id = id,
  Name = "Hogwarts",
  Address = "Street, City, Country"
};
...