Kendo MVC3级联ComboBoxFor / DropDownListFor问题

时间:2014-06-23 17:14:09

标签: asp.net-mvc-3 kendo-ui kendo-dropdown

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

控制器被称为" SalesOrder。"以下是我希望从我的Kendo下拉列表中获得的行为:

  1. SourceSystem下拉列表(DDL)是第一个要加载的。
  2. 收件人DDL必须根据SourceSystem DDL中的值进行填充。
  3. 必须根据Consignee DDL中的值填充第三个DDL,但我认为如果我能让收件人DDL正常工作,我也可以使第三个DDL工作。
  4. 以下是下拉列表和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变量中获取记录,并且我总是按预期获得TEST SourceSystem 1。但是,填充的唯一DDL是SourceSystem列表。当我更改SourceSystem列表中的值时,我甚至看不到对GetConsignees方法的新调用。我需要Consignee DDL来改变SourceSystem的变化,所以这是一个问题。

    我不明白为什么我在这里级联很麻烦。有什么我想念的吗?我错误地想到了这个吗?请帮助!

0 个答案:

没有答案