如何接受列表中没有的任何值?

时间:2016-07-14 12:53:56

标签: asp.net asp.net-mvc combobox kendo-ui kendo-asp.net-mvc

在我的Asp.net MVC项目中,我有一个Kendo组合框,它附在模型中的客户列表中。我想要插入新客户的能力(如果他们不在列表中)。我将组合框设置为:

 @(Html.Kendo().ComboBox()
     .Name("CustomerName")
     .Filter("startswith")
     .Placeholder("Select a customer...")
     .BindTo(@Model.CustomerSelectList)
     .Events(e => { e.Select("onSelect"); })
     .DataTextField("Text")
     .DataValueField("Value")
     .Suggest(true)
     .HtmlAttributes(new { style = "width:250px;" }))

我还提供了onSelect()来进行ajax调用以引入和填充现有客户的地址。

function onSelect(e) {
    // get the dataItem corresponding to the selectedIndex to get the text and value                
    var dataItem = this.dataItem(e.item.index());               
    var value = dataItem.Value;
    var text = dataItem.Text;
    //Retreive list for new selection
    var url = '@Url.Content("~/Request/GetCustomerAddress")' + '?CustID=' + value;
    $.ajax({ url: url, success: CustomerDataRetrieved, cache: false, error: AjaxError, type: 'GET', dataType: 'json' });
}

function CustomerDataRetrieved(data) {        
    $("#Address1").val(data.Address1);
    $("#Address2").val(data.Address2);
    $("#Address3").val(data.Address3);
    $("#City").val(data.City);
    $("#State").val(data.State);
    $("#PostalCode").val(data.PostalCode);
    $("#Country").val(data.Country);       
}

当我从现有客户列表中选择一个项目时,它运行良好并填写客户的地址。但是,当我在组合框中键入新的客户名称时,它会自动清除组合框。如何让Kendo组合框保留新值?

更新1: 正如您在下图中看到的那样,当我从列表中键入一个值时,值进入组合框并按下回车键后,它将我带到填入数据的下一个字段(Address1),并且组合框值保持不变。但是,如果我输入一个新值并按下回车键,我会转到下一个字段(地址1),但组合框值会消失。

Combobox Behavior

1 个答案:

答案 0 :(得分:0)

也许你可以尝试这样的事情:

function onSelect(e) {

   // get the dataItem corresponding to the selectedIndex to get the text and value                
   var dataItem = this.dataItem(e.item.index()); 

   // get the text value of the combobox
   var customerName = $('#CustomerName').data("kendoComboBox").text();

    if(dataItem ==! null && dataItem ==! undefined){          
        var value = dataItem.Value;
        var text = dataItem.Text;
        //Retreive list for new selection
        var url = '@Url.Content("~/Request/GetCustomerAddress")' + '?CustID=' + value;
        $.ajax({ url: url, success: CustomerDataRetrieved, cache: false, error: AjaxError, type: 'GET', dataType: 'json' });
    }

   // replace the text
   $('#CustomerName').data("kendoComboBox").value(customerName);

}

它可能只使用if包装ajax调用,但如果不尝试获取并替换值。我的想法是,如果你输入的东西不应该在数据源中,并且ajax查找失败。