试图让级联下拉列表在asp.net mvc中工作

本文关键字:net mvc 工作 asp 级联 下拉列表 | 更新日期: 2023-09-27 17:58:52

我正试图根据一个单独的dropdownlist的值来更改dropdownlists中的项。有人告诉我,我想要一个级联的下载列表。我遵循了asp.net mvc 4的教程,我的代码如下,但它不起作用,我看不到任何问题

以下是我的jquery/ajax代码,当用户更改父下拉列表的值时运行:

$('#paperTypeJList').change(function () {
            var modelData = {
                paperType: $("#paperTypeJList").text,
                urgency: $("#urgencyJList").val(),
                numOfPages: $("#numOfPagesJList").val()
            };
            var typeValue = $("#paperTypeJList").val();
            var url = @Url.Action("UrgencyList", "Home", typeValue);
            $.getJSON(url, function(data) {
                var items = "<option>Select the Urgency</option>";
                $.each(data, function(i, urgency) {
                    items += "<option value='" + urgency.Value + "'>" + urgency.Text + "</option>";
                });
                $("#urgencyJList").html(items);
            });
        $.ajax({
            url: '@Url.Action("getNewPrice","Home")',
            type: "POST",
            data: modelData,
            cache: false,
            async: true,
            success: function(response){
                document.getElementById('priceLabel').innerHTML = response;
            }
        });
    });

以下是填充相关下拉列表的方法:

public SelectList GetPaperTypeSelectList()
    {
        var paperTypes = PaperType.GetPaperTypes();
        return new SelectList(paperTypes.ToArray(), "deadlineFormat", "typeName");
    }
    public ActionResult PaperTypeList()
    {
        if (HttpContext.Request.IsAjaxRequest())
        {
            return Json(GetPaperTypeSelectList(), JsonRequestBehavior.AllowGet);
        }
        else
        {
            return RedirectToAction("Index");
        }
    }
    public ActionResult UrgencyList(string deadlineValue)
    {
        var urgencyList = from u in Urgency.GetUrgency()
                          where u.deadlineFormat.Contains(deadlineValue) == true
                          select u;
        if (HttpContext.Request.IsAjaxRequest())
        {
            return Json(new SelectList(urgencyList.ToArray(), "urgencyValue", "urgencyName"), JsonRequestBehavior.AllowGet);
        }
        else
        {
            return RedirectToAction("Index");
        }
    }

最后但同样重要的是,这里是我的jquery代码,它为父dropdownlist创建项目:

$(function () {
var url = '@Url.Action("PaperTypeList","Home")';
$.getJSON(url, function (data) {
    var items = "<option>Select the Type of Paper</option>";
    $.each(data, function (i, papertype) {
        items += "<option value='" + papertype.Value + "'>" + papertype.Text + "</option>";
    });
    $('#paperTypeJList').html(items);
});

});

试图让级联下拉列表在asp.net mvc中工作

将操作UrgencyList的参数名称重命名为

public ActionResult UrgencyList(string id)

MVC无法解析名称"deadlineValue",您必须映射一个新的Route,但我不建议这样做。

要了解有关路由的更多信息,请打开App_Start/RouteConfig.cs文件。在那里,您将看到"id"在默认情况下是由MVC映射的。

  routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",//Id is mapped by default
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );