0

Cascading DropDownListFor に問題があります。ページを Telerik 2012 MVC 拡張機能から UI for ASP.NET MVC にアップグレードしていました。他のすべてのページは簡単でしたが、カスケード ドロップダウン リストを含む 1 つのページは悪夢でした。

コントローラーは「SalesOrder」と呼ばれます。剣道ドロップダウンリストから私が望む動作は次のとおりです。

  1. SourceSystem ドロップダウン リスト (DDL) が最初に読み込まれます。
  2. 荷受人 DDL は、SourceSystem DDL の値に基づいて入力する必要があります。
  3. 荷受人 DDL の値に基づいて設定する必要がある 3 番目の DDL がありますが、荷受人 DDL を機能させることができれば、この 3 つ目の 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>

これは、SourceSystem が変更されたときに荷受人を取得するためにサポートされている SalesOrder コントローラーの GetConsignees です。

            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 メソッドへの新しい呼び出しすら表示されません。SourceSystem が変更されたときに Consignee DDL を変更する必要があるため、これは問題です。

ここでカスケードするのになぜそんなに苦労しているのか理解できません。足りないものはありますか?私はこれについて間違って考えていますか?助けてください!

4

0 に答える 0