Kendo.DropDownList动态更改数据源

时间:2013-01-28 17:52:26

标签: drop-down-menu datasource kendo-ui

我是新用户,但未能找到展示我想要完成的内容的示例。

我需要在两个不同的上下文中使用相同的Kendo.DropDownList,但必须更新一个属性[.Name(“DisbursedTo”)]。起初我使用了一个隐藏/显示方法和两个单独的ddl。它起作用了,除了每个ddl小部件都需要一个唯一的'.Name',因此我对模型属性的更新已关闭。使用一个ddl,我正在尝试动态更改ddl属性。

默认情况下,我使用'Locations'数据加载ddl(这很好)。初始加载后,我使用一个简单的单选按钮组'onclick'切换到'ADUsers',或者回到'Locations'。

CSHTML

    <label for="DisbursedTo">Disbursed To:</label>
    @(Html.Kendo().DropDownList()
            .Name("DisbursedTo")
            .DataTextField("Name")
            .DataValueField("LocationId")
            .SelectedIndex(20)
            .DataSource(dataSource => dataSource
                .Read(read => read.Action("GetLocations", "Disbursement"))  // Specify the action method and controller name        
                .ServerFiltering(true)                                      // If true the DataSource will not filter the data on the client.
                )
            )

脚本

    function OwnerTypeClick(ownerTypeValue) {
        if (ownerTypeValue == "P") {
            alert("calling DisbursedToADUsers");
            DisbursedToADUsers();
        }
        else {
            alert("calling DisbursedToLocations");
            DisbursedToLocations();
        }
    }

    function DisbursedToADUsers() {
        var adUsersIntranetDataSource = new kendo.data.DataSource({
            read: {
                action: { "GetADUsersIntranet": "Disbursements" }
            }
        });

        var ddl = $("#DisbursedTo").kendoDropDownList({
            dataTextField: "displayName",
            dataValueField: "EmployeeNumber",
            dataSource: adUsersIntranetDataSource,
            autoBind: true
        });

        ddl.dataSource.read();
    }

    function DisbursedToLocations() {
        var locationsDataSource = new kendo.data.DataSource({
            read: {
                action: { "GetLocations": "Disbursements" }
            }
        });

        var ddl = $("#DisbursedTo").kendoDropDownList({
            dataTextField: "Name",
            dataValueField: "LocationId",
            dataSource: locationsDataSource,
            autoBind: true
        });

        ddl.dataSource.read();
    }

我在'ddl.dataSource.read();上遇到以下错误所以我没有正确地更改/初始化我的数据源。

0x800a138f - Microsoft JScript运行时错误:无法获取属性“read”的值:object为null或undefined

如果有人做过类似的事情,我会非常感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

提供的代码表明您每次都在从同一个HTML元素初始化新的DropDownList小部件,并且每次都会创建新的DataSource。

您可以在函数外部创建两个不同的DataSource,然后在函数体中使用DropDownList setDataSource() method在两个dataSource之间切换,并使用setOptions() method更改其他选项,如dataTextField和dataValueField,例如:

Example

答案 1 :(得分:-2)

您需要使用Kendo DropDownListFor。