通过 Ajax 从控制器执行函数



我有一个 ASP.net 的MVC,我正在尝试使用Ajax从c#函数中获取字符串,我已经尝试使用此解决方案,但似乎没有任何效果。

这是我的控制器功能:

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>

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

您可以尝试的几件事是:

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

<script>标签放在视图中@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的底部。 如果您将<script>标签放在视图中,它们将在浏览器请求 jQuery 之前出现。

<script>标签放在@section Scripts { }元素中意味着 javascript 实际上将被添加到@RenderSection("Scripts")指定的位置_Layout.cshtml

最新更新