ASP.NET MVC应用程序中的AJAX调用不调用Action方法

时间:2018-03-16 00:22:07

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

我有以下ASP.NET MVC .cshtml文件,其中我执行以下操作: 抓住名字&来自MyObject的Id值并在其中创建DropDownList,当用户选择下拉框中的项目时,我尝试使用AJAX来调用TheMethodToCall TheController这是{{1}中的方法1}},并尝试显示TheMethodTocall返回的文本结果。

@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>
    }
}

我有几个问题,请帮忙!他们在这里:

  1. 我已将Visual Studio调试器断点放在TheMethodToCall方法中,但当用户从DropDownList中选择一个项目时,它不会被点击。
  2. 这是显示从result返回的TheMethodToCall文字的正确方法吗?
  3. 更新

    到目前为止,我很欣赏这些答案,但是我在这个方法中设置了一个断点,但它仍然没有被调用。我确实将$('#SelectFromDropdownList').change(function ()更改为$('#mydropdownid').change(function ()。还有什么可做的吗?

        [WebMethod()]
        public static string TheMethodToCall()
        {
            return "This is a test";
        }
    

1 个答案:

答案 0 :(得分:1)

  1. 您的.change侦听器使用了错误的ID。下拉列表的ID为mydropdownid,但在您的jQuery中,您有$('#SelectFromDropdownList').change。将其更改为$('#mydropdownid').change

  2. 您在AJAX响应中使用结果的方式不正确。您正在尝试使用服务器端Razor / C#(在页面最初加载时执行)来处理页面加载后很久发生的响应。您只需在响应函数中使用JavaScript。