DropDownList Children Binding

DropDownList Children Binding

本文关键字:Binding Children DropDownList      更新时间:2023-09-26

我有一个下拉列表的问题,我不知道如何解决它。

有两种不同的方式进入我的视图:添加新建和编辑。

1)添加新:在这种情况下,我的下拉列表与另一个相关,一切都很好。下拉列表被锁定并为空,直到我在另一个中选择一些内容。

2)编辑:在这种情况下,我的下拉列表已经使用存储的数据绑定。当然,如果我在"父"元素中更改所选项,我也希望更改子元素的数据。

问题出现在2种情况下:当我从相关下拉列表中存储的数据中选择其他内容时。它绑定了正确的数据,但是第一个是空项,而不是数据的第一个。

我怎么解决它?

                            <%=Html.Kendo().DropDownListFor(model => model.GNR_FK)
                                .Name("GNR_FK")                                                                 .BindTo((IEnumerable<Models.Widget.Combo>)ViewData["Customer"])
                                .DataTextField("descriptionText")
                                .DataValueField("valueID")
                                .Value(Model.GNR_FK.ToString())
                                .Events(e =>
                                        {
                                            e.Select("onSelect");
                                        })                                            
                            %>
                            <%=Html.Kendo().DropDownListFor(model => model.CNT_FK)                                    .BindTo((IEnumerable<Models.Widget.Combo>)ViewData["Sender"])
                                .Name("CNT_FK")
                                .DataTextField("descriptionText")
                                .DataValueField("valueID")
                                %>

条件:

        if (Model.PK == 0)
        {
            loadValues(current);
        }
        else
        {
            loadEditValues(current);
        }

    public JsonResult loadValues(Models.Model current, int PK = 0)
    {
            IDataReader sender = Model.getSender(PK);
            Models.Widget.Combo SenderNA = new Models.Widget.Combo();
            List<Models.Widget.Combo> receiveSender = new List<Models.Widget.Combo>();
            SenderNA.valueID = 0;
            SenderNA.descriptionText = "NA";
            receiveSender.Add(SenderNA);
            while (sender.Read())
            {
                Models.Widget.Combo newItem = new Models.Widget.Combo();
                newItem.valueID = int.Parse(sender["PK"].ToString());
                newItem.descriptionText = sender["SURNAME"].ToString();
                receiveSender.Add(newListItem);
            }
            return Json(receiveSender, JsonRequestBehavior.AllowGet);
    }

    private void loadEditValues(Models.Model current)
    {
            int selected = current.GNR_FK;
            IDataReader sender = current.getSender(selectedCustomer);
            Models.Widget.Combo SenderNA = new Models.Widget.Combo();
            List<Models.Widget.Combo> receiveSender = new List<Models.Widget.Combo>();
            SenderNA.valueID = 0;
            SenderNA.descriptionText = "NA";
            receiveSender.Add(SenderNA);
            while (sender.Read())
            {
                Models.Widget.Combo newItem = new Models.Widget.Combo();
                newItem.valueID = int.Parse(sender["PK"].ToString());
                newItem.descriptionText = sender["SURNAME"].ToString();
                receiveSender.Add(newListItem);            

                ViewData["List"] = receiveSender;
            }         
    }

脚本:

   function onSelect(e) {
        var dataItem = this.dataItem(e.item);
        var PK = dataItem.valueID;
        $.ajax({
            type: 'POST',
            url: '/Project/loadValues',
            data: "{'PK':'" + PK + "'}",
            contentType: 'application/json; charset=utf-8',
            success: function (result) {     
                $("#CNT_FK").data("kendoDropDownList").dataSource.data(result);
            },
            error: function (err, result) {
                alert("Error" + err.responseText);
            }
        });
    }

问题解决!

缺少在更改数据后自动选择第一项的select方法!

success: function (result) {
    var dropdown = $("#CNT_FK").data("kendoDropDownList");
    dropdown.dataSource.data(result);
    dropdown.select(0);
},