Javascript ASP.NET MVC应用程序中的AJAX调用未调用操作方法
我有以下ASP.NET MVC.cshtml文件,在其中我执行以下操作: 从Javascript ASP.NET MVC应用程序中的AJAX调用未调用操作方法,javascript,c#,ajax,asp.net-mvc,razor,Javascript,C#,Ajax,Asp.net Mvc,Razor,我有以下ASP.NET MVC.cshtml文件,在其中我执行以下操作: 从MyObject中获取Name&Id值,并从中创建一个DropDownList,当用户在下拉框中选择一个项目时,我尝试使用AJAX调用methodtocall,这是控制器中的一个方法,并尝试显示methodtocall返回的文本结果 @model List<MyWebApp.Models.MyObject> @if (Model.Count > 0) { using (Html.BeginFo
MyObject
中获取Name&Id值,并从中创建一个DropDownList
,当用户在下拉框中选择一个项目时,我尝试使用AJAX调用methodtocall
,这是控制器中的一个方法,并尝试显示methodtocall
返回的文本结果
@model List<MyWebApp.Models.MyObject>
@if (Model.Count > 0)
{
using (Html.BeginForm())
{
<div class="input-group mb-3">
@Html.DropDownList("SelectFromDropdownList", Model.Select(i => new SelectListItem()
{
Text = i.Name,
Value = i.Id
}), "This is the default DropDownList option", new { @class="custom-select", @id="mydropdownid"})
<script>
$(function(){
$('#SelectFromDropdownList').change(function () {
var typeFeed = $(this).val();
// Perform AJAX call
$.get("@Url.Action("TheMethodToCall", "TheController")", { TypeFeed: typeFeed }, function (result){
@Html.DisplayText(result);
});
});
});
</script>
</div>
}
}
您的.change侦听器使用了错误的ID。下拉列表的ID为mydropdownid
,但在jQuery中您有$(“#SelectFromDropdownList”)。change
。将其更改为$('#mydropdownid')。更改
在AJAX响应中使用结果的方式不正确。您试图使用服务器端Razor/C#(在页面最初加载时执行)来处理在页面加载后很长时间内发生的响应。您只需要在响应函数中使用JavaScript
您添加了新的{id=“mydropdownid”}
,生成了`因此您没有一个元素具有id=“SelectFromDropdownList”
-因此脚本需要是$('#mydropdownid')。更改(函数(){
和否-@Html.DisplayText(结果)
将不起作用。要将结果添加到DOM中,您需要$(someElement).html(result)
为什么有[WebMethod()]
?它应该是public ActionResult TheMethodToCall(){返回内容(“这是一个测试”);
另外,您正在尝试将数据传递到函数{TypeFeed:TypeFeed}
但是你的函数不接受任何参数。现在,当你在学习时,不要发送任何数据。这只会使事情复杂化。我觉得我说这句话很疯狂,但它仍然不起作用!我已经采纳了你的所有建议,但仍然不会调用MethodToCall
方法调用(断点未在其内部命中)。可能是我缺少AJAX库吗?还是@Url.Action
是使用的错误方法?对于Url.Action
中的第二个参数,如果我有一个名为HouseController
的控制器,我会将House
或HouseController
作为此方法的第二个参数吗?谢谢您的回答。我很抱歉JS/AJAX非常新,因此您可以编辑代码,使其仅在响应函数中使用JavaScript吗?这取决于您希望对响应执行什么操作。一个示例可能是只显示带有响应所述内容的弹出/警报:function(result){alert(result);};
[WebMethod()]
public static string TheMethodToCall()
{
return "This is a test";
}