【问题标题】:How to call a method and show data with async? It does nothing when I try to如何调用方法并异步显示数据?当我尝试时它什么也没做
【发布时间】:2021-11-09 14:40:26
【问题描述】:

我有一种方法可以读取一个人的一些详细信息。类似于主细节的东西。 该操作在弹出框内调用。我需要使调用异步的方法。 当我使用 ajax 参数 async:true 调用该方法时,它失败了。它什么也不做,它不显示弹出窗口,也不在控制台中抛出任何异常。 这是我的代码: C#

public async Task<ActionResult> PersonDetails(int id)
    {
        var model =  await _context.Person.Where(e => e.Person == id && e.Age > 5).ToListAsync();
        return View(model);
    }

ajax 调用:

$.ajax({
            url: "/Home/PersonDetails/" + id,
            method: "post",
            async: true,

            //data: { id: id },
            success: function (data) {
                set_data = data;
            },
            error: function (jqXHR, textStatus, errorThrown) {

                console.log(jqXHR.statusText + textStatus + errorThrown);
            }
        });

当控制器中没有异步、任务和等待并且异步设置为 false 时有效。此外,如果我在控制器上保留异步任务和等待并将 ajax 异步设置为 false,则它可以工作。 如何解决这个问题?

【问题讨论】:

  • 如果你调试你的控制器,它会命中控制器并运行所有代码吗?
  • 您在 ajax 方法中使用了 'post',但我在 C# 控制器方法上方看不到 [HttpPost] 属性,除非您从示例中省略。
  • 我已经添加了httpost,它的作用是一样的。当我调试时没有任何反应。就像我从未点击过按钮一样。
  • 如果您在调试时没有触发控制器操作,请检查您的路由是否配置正确。
  • 打开您的浏览器网络选项卡并检查此特定请求的状态...

标签: c# ajax asp.net-mvc asynchronous async-await


【解决方案1】:
  1. $.ajax() 调用本质上是异步的,默认为 true,因此您不需要添加 async: true

  2. 使用data: { id: id },并从url: 中删除+ id

  3. async Task&lt;ActionResult&gt; 替换为JsonResult(必填using System.Web.Mvc

  4. public JsonResult PersonDetails(int id) { ... }上方添加[HttpPost]

  5. 使用var model = _context.Person.Where(e =&gt; e.Person == id &amp;&amp; e.Age &gt; 5).ToList();

  6. 返回return Json(model); 不返回视图

  7. 完成!可以在$.ajax.success函数中console.log(data);查看返回数据。

【讨论】:

  • 但是如果我不指定异步任务并在c#后端使用await,那么异步读取如何?
【解决方案2】:

问题是我的代码逻辑。我在调用调用ajax的方法之前已经设置好数据了。

【讨论】:

    猜你喜欢
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多