KendoUI DropDownList - 选择“新建...”时,显示文本框

时间:2014-03-03 14:11:15

标签: c# asp.net-mvc razor kendo-ui knockout-kendo

我有一个KendoUI DropDownList中的项目列表。它是使用Razor语法生成的

我想做什么:

  • 如果用户没有从列表中找到他/她正在寻找的内容,他/她会选择“新...”(静态值)

  • 应显示隐藏的文本字段,允许他们添加新值

  • 新值应该回发到控制器方法(WIP)

我的想法:

  • 获取数据

  • 静态添加“新建”选项

到目前为止效果很好:

  • 从控制器操作方法获取数据并按预期显示列表

  • 我可以将它绑定到两个事件:“更改”和“DataBound”

问题:

我正在使用jQuery的“ready”方法来添加名为“New ..”的静态值。它重复了这个值。我认为这是一个无限循环。

所以我被困在这一点

在部分视图中:

 @(Html.Kendo().DropDownListFor(model => model.ClientType)
                              .DataSource(ds => ds.Read(read => read.Action("FetchAllClientTypes", "ClientType")))
                              .DataTextField("Description")
                              .DataValueField("Id")
                              .AutoBind(true)
                              .Events(e =>
                               {
                                   e.Change("onClientTypeChange").DataBound("onClientTypeDataBound");
                               })
                              .ToClientTemplate()
                      )
                @Html.ValidationMessageFor(model => model.ClientType)

使用Javascript:

/*When dropdown is bound, add "New..."*/
/* Duplicates "New". Appears to be infinite. */
function onClientTypeDataBound() {
    var clientTypesDropDownList = $('#ClientType').data('kendoDropDownList');
    clientTypesDropDownList.dataSource.add({ Description: 'New...', value: '-1' });

};

/**Works**/
function onClientTypeChange() {

    alert('Testing On change');
};

1 个答案:

答案 0 :(得分:0)

您描述的所有内容都是ComboBox小部件的开箱即用支持。如果items集合中没有这样的值,则ComboBox的值将成为用户键入的文本。仔细看看ComboBox小部件here(更具体地说,在使用不同的值时使用getValue按钮)。