【问题标题】:Populating dropdown via AJAX Fails通过 AJAX 填充下拉列表失败
【发布时间】:2014-06-25 13:47:17
【问题描述】:

我希望在我的 MVC 项目中通过 AJAX 填充下拉列表。这样做时,“网络”调试工具在搜索我的 url 时显示 404,并且总是落入我的 AJAX 调用的错误函数中。

我的 Javascript 位于视图底部,如下所示:

function PopulateTournamentDropdown() {
        $.ajax({
            url: '/Leaderboard/PopulateTournamentDropDownList',
            type: 'POST',
            dataType: 'json',
            contentType: 'application/json; charset=utf-8',
            success: function (data) {
                var ddlTournament = $("#ddlTournament");
                ddlTournament.empty();
                $.each(data, function (i, tournament) {
                    ddlTournament.append('<option value="' + tournament.Id + '">' + tournament.Name + '</option>');
                });
            },
            error: function () {
                alert('Failed to retrieve tournament.');
            }
        });
    }

    $(function () {

        $('#ddlTournament').change(PopulateTournamentDropdown);
        PopulateTournamentDropdown();
    });

我的控制器如下:

public class LeaderboardController : Controller
    {
        public static string PopulateTournamentDropDownList()
        {
            var list = GetTournamentDetails();
            return JsonConvert.SerializeObject(list, Newtonsoft.Json.Formatting.Indented, JsonSetting);
        }
}

到目前为止,控制器中的方法从未被命中。

请帮忙。

【问题讨论】:

  • 我不确定,但您不会从'/Leaderboard/PopulateTournamentDropdown' 中丢失List 吗?应该是'/Leaderboard/PopulateTournamentDropdownList'
  • 我很抱歉。我复制错了。我确实在 URL 中包含了列表。

标签: javascript jquery ajax model-view-controller


【解决方案1】:

我认为问题在于 Action 是一种静态方法。你可以试试这个:

public class LeaderboardController : Controller
{
    public ActionResult PopulateTournamentDropDownList()
    {
        var list = GetTournamentDetails();
        return Content(JsonConvert.SerializeObject(list, Newtonsoft.Json.Formatting.Indented, JsonSetting), "application/json");
    }
}

【讨论】:

  • 这行得通。我的印象是 MVC 中所有返回 ActionMethods 的方法都必须返回 Views。 Content() 对我来说是一个新概念。谢谢!
【解决方案2】:

控制器操作方法应具有以下签名:

public ActionResult PopulateTournamentDropDownList()
{
  ...
}

注意,它是实例(非静态)方法。

【讨论】:

  • 所以为了在 MVC 中进行任何 AJAX 调用,我必须返回一个必须返回字符串的 ActionResult?有什么方法可以通过 MVC 中的 AJAX 返回 JsonResult 或 JSON 字符串?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
  • 2019-01-02
  • 2022-11-10
  • 2011-07-17
  • 2021-09-08
相关资源
最近更新 更多