0

我遇到了级联 DropDownListFor 的问题。我正在将一个页面从 Telerik 2012 MVC Extensions 升级到 ASP.NET MVC 的 UI。虽然其他页面都很轻而易举,但带有级联下拉列表的页面却是一场噩梦。

控制器称为“SalesOrder”。这是我想要从我的 Kendo 下拉列表中获得的行为:

  1. SourceSystem 下拉列表 (DDL) 是第一个加载的。
  2. Consignee DDL 必须根据 SourceSystem DDL 中的值进行填充。
  3. 还有第三个 DDL 必须根据收货人 DDL 中的值填充,但我认为如果我可以让收货人 DDL 工作,我也可以让这第三个 DDL 工作。

这是下拉列表和javascript。

                @(Html.Kendo().DropDownListFor(model => model.SourceSystem)
                    .BindTo(ViewBag.SourceSystemShortNames)
                    .DataTextField("SourceSystemDisplayName")
                    .DataValueField("SourceSystemId")
                    .Value(Model.SourceSystem)
                )


                @(Html.Kendo().DropDownListFor(model => model.Consignee)
                    .CascadeFrom("SourceSystem")
                    .DataSource(source =>
                    {
                        source.Read(read =>
                        {
                            read.Action("GetConsignees", "SalesOrder")
                                .Data("GetSourceSystemVal");
                        });
                    })
                    .Value(Model.Consignee)
                    .DataTextField("ConsigneeDisplayName")
                    .DataValueField("ConsigneeId")
                    .AutoBind(false)
                )

<script type="text/javascript">
    function GetSourceSystemVal() {
        return {
            SourceSystem: $("#SourceSystem").val()
        };
    }
</script>

这是 SalesOrder 控制器中的 GetConsignees,它应该在 SourceSystem 更改时获取收货人。

            public JsonResult GetConsignees(string SourceSystem)
            {
                var consignees = dbContext.Consignees.AsQueryable();

                var returnConsignees = consignees
    .Where(r => r.SourceSystemShortName == SourceSystem)
    .Select(r => new { ConsigneeId = r.Consignee1, ConsigneeDisplayName = r.Consignee1 });

                return Json(returnConsignees, JsonRequestBehavior.AllowGet);
            }

SourceSystem 下拉列表填充得很好,因为它在页面加载时设置为 ViewBag 对象。当页面加载时,我什至接到了对 ~/SalesOrder/GetConsigness/?SourceSystem=TEST 的调用。我验证了我在 returnConsignees 变量中得到了记录,并且我总是得到 1 与预期的 TEST SourceSystem。但是,唯一填充的 DDL 是 SourceSystem 列表。当我更改 SourceSystem 列表中的值时,我什至看不到对 GetConsignees 方法的新调用。我需要在 SourceSystem 更改时更改 Consignee DDL,所以这是一个问题。

我不明白为什么我在这里级联遇到这么多麻烦。有什么我想念的吗?我想错了吗?请帮忙!

4

0 回答 0