【问题标题】:Execute function from controller via Ajax通过 Ajax 从控制器执行功能
【发布时间】:2020-04-05 05:51:44
【问题描述】:

我有一个 ASP.net MVC,我正在尝试使用 Ajax 从 c# 函数中获取字符串,我尝试过使用 this solution,但似乎没有任何效果。

这是我的控制器功能:

public string Test()
    {
        string test = "hi";

        return test;
    }

这是我的脚本标签:

<script>
    var textbox = document.getElementById("textbox");
    textbox.addEventListener("keyup", function (event) {
        if (event.keyCode === 13) {
            $.ajax({
                type: 'GET',
                url: '@Url.Action("Test", "Home")',
                success: function (result) {
                    alert("hi");
                },
                error: function (request, status, error) {
                    alert(request.responseText);
                }
            });
        }
    });
</script>

【问题讨论】:

  • 您是否尝试过return Json(test, JsonRequestBehavior.AllowGet); 而不仅仅是return test,就像在您链接的解决方案中一样。
  • 我正在使用 net.core 所以不能真正使用 JsonRequestBehavior.AllowGet
  • 是否有任何控制台错误?您是否验证过实际调用了 ajax 方法?我会在 javascript 中添加一些日志记录以验证正在调用 ajax 方法
  • 嘿,控制台没有给出任何错误,但我会做一些断点,就像 Jonathan 建议的那样,看看它是否真的被调用了。
  • 试图这样做似乎没什么异常

标签: c# jquery ajax asp.net-mvc razor


【解决方案1】:

我认为提供的信息不足以提供准确的解决方案。我创建了一个本地 MVC 应用程序并添加了一个返回字符串的 Test() 操作方法,并且我能够使用您的 ajax 代码获得结果。

您可以尝试以下几件事:

  1. 确保 $.ajax 实际被调用。因此,如果您有周围的逻辑,请确保它按预期命中
  2. ajax 有一个错误回调,您可以将其添加到ajax 调用中以查看是否有错误。 This 有一个示例,如何使用错误回调来查看问题所在

【讨论】:

  • 已编辑以添加我的脚本标签,即使事件肯定被“调用”,似乎也没有调用 ajax。
  • 运行提琴手。 GET 请求是否正在通过?使用 Chrome 开发者工具并在$.ajax 行放置一个断点。是不是被击中了?在您的控制器代码中放置一个断点。是不是被击中了?跟踪来自浏览器的消息,通过网络,再到服务器,以获得一些洞察力。
【解决方案2】:

&lt;script&gt; 标签放在视图中的@section 中,并将@RenderSection 放在_Layout.cshtml 的底部。

// in your view
@section Scripts {
    <script>
    // your script here
    ....
    </script>
}

然后把它放在_Layout.cshtml的底部,并确保它在jQuery之后:

@RenderSection("Scripts", required: false)

说明

我的猜测是 DOM 解析你的 javascript 时没有加载 jQuery。如果是这种情况,您的$.ajax 电话将永远无法正常工作。

当前的 Visual Studio MVC 模板(用于 .Net-core)将 jQuery 放置在 _Layout.cshtml 的底部。如果你把&lt;script&gt;标签放在你的视图中间,它们会在浏览器请求jQuery之前出现。

&lt;script&gt; 标记放置在@section Scripts { } 元素中意味着javascript 将实际添加到_Layout.cshtml 中由@RenderSection("Scripts") 指定的位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-03
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 2018-10-11
    • 2014-10-25
    相关资源
    最近更新 更多