C# 通过Ajax从控制器执行函数

C# 通过Ajax从控制器执行函数,c#,jquery,ajax,asp.net-mvc,razor,C#,Jquery,Ajax,Asp.net Mvc,Razor,我有一个ASP.NETMVC,我正在尝试使用Ajax从c#函数中获取一个字符串,我尝试过使用Ajax,但似乎没有任何效果 这是我的控制器功能: public string Test() { string test = "hi"; return test; } <script> var textbox = document.getElementById("textbox"); textbox.addEventListe

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

这是我的控制器功能:

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>
这是我的脚本标签:

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>

var textbox=document.getElementById(“textbox”);
textbox.addEventListener(“键控”,函数(事件){
如果(event.keyCode===13){
$.ajax({
键入:“GET”,
url:'@url.Action(“测试”,“主页”),
成功:功能(结果){
警报(“hi”);
},
错误:功能(请求、状态、错误){
警报(request.responseText);
}
});
}
});

我认为没有足够的信息给出准确的解决方案。我创建了一个本地MVC应用程序,并添加了一个返回字符串的Test()操作方法,我能够通过ajax代码获得结果

您可以尝试以下几点:

  • 确保实际调用了$.ajax。所以,如果你有周围的逻辑,确保它按预期击中它
  • ajax有一个错误回调,您可以将其添加到ajax调用中,以查看是否存在错误。有一个如何使用错误回调来查看错误的示例
  • 标记放在视图的
    @部分中,并将
    @RenderSection
    放在
    \u Layout.cshtml
    的底部

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

    解释

    我的猜测是,当DOM解析javascript时,不会加载jQuery。如果是这种情况,您的
    $.ajax
    调用将永远无法工作

    当前的Visual Studio MVC模板(用于.Net core)将jQuery放在
    \u Layout.cshtml
    的底部。如果在视图中间放置<代码> <代码>标签,它们将出现在浏览器请求jQuery之前。


    标记放在
    @section Scripts{}
    元素中意味着javascript将实际添加到
    \u Layout.cshtml
    @RenderSection(“脚本”)
    指定的位置

    您是否尝试过返回Json(test,JsonRequestBehavior.AllowGet)
    而不是像您链接的解决方案中那样的
    返回测试
    。我使用的是net.core,因此无法真正使用JsonRequestBehavior.AllowGetAre是否存在任何控制台错误?您是否验证了实际调用ajax方法的正确性?我会在javascript中添加一些日志,以验证是否调用了ajax方法。控制台不会给出任何错误,但我会执行一些断点,如Jonathan建议的那样,以查看是否实际调用了ajax方法。尝试这样做时,添加脚本标记似乎没有任何异常,虽然事件确实被“调用”,但ajax似乎并没有被调用。运行Fiddler。
    GET
    请求是否正在通过?使用Chrome开发者工具并在
    $.ajax
    行上设置断点。它被击中了吗?在控制器代码中放置断点。它被击中了吗?从浏览器跟踪消息,通过网络跟踪消息,在服务器上跟踪消息,以获得一些信息。