【问题标题】:How to pass data from a controller to view during a JQuery AJAX call in MVC?如何在 MVC 中的 JQuery AJAX 调用期间从控制器传递数据以查看?
【发布时间】:2020-04-22 10:30:42
【问题描述】:

在我看来,我有一个 AJAX 调用,它向我的控制器发送一个 id 参数。这一点工作正常。在我的控制器中,我计划使用该 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 调用的数据参数才能传递值吗?

在此先感谢

【问题讨论】:

    标签: c# jquery ajax asp.net-core-2.2


    【解决方案1】:

    最简单的方法是使用控制器中的return Json() 返回从数据库中检索到的实体。

    请注意,在检索数据时,应该发出 GET 请求,而不是 POST。此外,默认的 MVC 配置应该设置路由以允许您在 URL 中提供所需资源的id。因此,试试这个:

    $.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"
    };
    

    【讨论】:

    • 感谢您的回复。但是我得到“当前上下文中不存在 JsonRequestBehavior”。我正在运行 .net core 2.2 - 这可能是问题吗?
    • 啊,在这种情况下,您可以从 Json() 调用中删除该参数。我已经更新了答案
    • 这对我有用,非常感谢。就这样我正确理解这一点,1 - 我们不需要像我最初所做的那样显式传递 ID 参数,因为 MVC 默认路由是 Home/GetSchoolDetailsAJAX/{id} - 即使这是 AJAX 调用而不是实际页面/视图。 2 - 我们只是在控制器中创建一个对象,然后将其作为 Json 发送回 AJAX 调用。 view / ajax 调用现在可以访问该对象中的任何数据。
    • 没问题,很高兴为您提供帮助1) 您仍在传递 ID 参数,它是作为 URL 的一部分发送的。 2) 没错。
    猜你喜欢
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    相关资源
    最近更新 更多