2016-07-14 16 views
0

私のAsp.net MVCプロジェクトでは、モデル内の顧客リストに添付されている剣道コンボボックスがあります。私は新しい顧客を入れる能力を望んでいます(まだリストに入っていない場合)。私も持参し、顧客のアドレスを既存埋めるためにAJAX呼び出しを行うために)(にonSelectを提供してきましたリストにない値を受け入れる方法は?

@(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;" })) 

:私はのように設定コンボボックスをしました。

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);  
} 

既存の顧客リストからアイテムを選択すると、それはうまく動作し、顧客の住所を記入します。しかし、コンボボックスに新しい顧客名を入力すると、自動的にコンボボックスがクリアされます。剣道のコンボボックスに新しい値を保持させるにはどうすればよいですか?

更新1: 下の図に示すように、値をコンボボックスに入力すると、値が入力された次のフィールド(Address1)に移動した後にEnterキーを押しますin、コンボボックス値のままです。しかし、新しい値を入力してEnterキーを押すと、次のフィールド(Address1)に移動しますが、コンボボックスの値は消えます。

Combobox Behavior

+0

質問は不明です。 onSelectメソッドがcomboBoxをクリアしていますか? –

+0

はい。 onSelect()から呼び出しが返ると、コンボボックスは空になります。スクリーンショットと説明で質問を更新しました。 – SJaka

答えて

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); 

}

それは場合にのみにAJAX呼び出しをラップで働くかもしれないが、しかし、ない場合は、取得して交換してください値。私の考えは、あなたが何かをタイプすると、それがデータソースにあってはならず、ajaxの検索が失敗するということです。

+0

var customerName = $( '#CustomerName')。データ( "kendoComboBox")。何も返しません。 customerNameは空の文字列です(例: "")。 – SJaka

+0

あなたはそこに何かを入力していませんでしたか? –

+0

私が言ったように、コンボボックスに新しい顧客名を入力し、タブを押します。 – SJaka

関連する問題