2017-05-16 10 views
1

剣道グリッドエディタ関数を使用して、ポップアップ(編集フォーム)の国番号&のカスケードDropDownListを実装しています。しかし、私はそれを行うことができません(リストは両方とも首尾よく埋められますが、カスケードされません。ユーザーがCountryオプションを選択したときと同様に、選択された国オプションに基づいて州リストが設定されます)。私を助けてください。私はTelerik Webサイトから多くのソリューションを試しましたが、DataSourceとしてOdataを使用しています。データベースからデータを取得しています。エディタ関数を使用したKendogridカスケーディングDropdownList

 public JsonResult Details() 
     { 

    var country = dbforcountry.Countries.ToLoist(); 
    list<SelectListItems> licountry = new list<SelectListItems>(); 
    foreach (var i in country) 
    { 
    licountry .Add(new list<SelectListItems> {Text = u.Name, Value = 
    u.ID.ToString() }); 
    } 

    return Json(new SelectList(licountry, "Value", "Text",   
    JsonRequestBehaviour.AllowGet)) 

    } 

    public JsonResult getstates(int id) 
    { 

     var states= dbforcountry.States.ToLoist(); 
     list<SelectListItems> listates = new list<SelectListItems>(); 
     foreach (var i in states) 
     { 
     listates.Add(new list<SelectListItems> {Text = u.Name, Value = 
     u.ID.ToString() }); 
     } 

     return Json(new SelectList(listates, "Value", "Text", 
     JsonRequestBehaviour.AllowGet)) 

     } 

エディタ機能(表示):

 function CountryDropDown(container, options) 
     { 
     $('<input id="Countrydropdown" data-text-field="Text" data-value- 
     field="Value" data-bind="value:'+options.field+'" />') 
     .appendTo(container) 
     .kendDropDownList({ 

     autoBind: false, 
     dataTextField="Text", 
     dataValueField="Value", 
     dataSource: { 
     type: "json", 
     transport:{ 
     read:{ 
      url: "../mycontroller/Details", 
      method:"POST" 
      } 
      } 
      }, 
      }) 
      } 

     function StateDropDown(container, options) 
     { 
     $('<input id="Statedropdown" data-text-field="Text" data-value- 
     field="Value" data-bind="value:'+options.field+'" />') 
     .appendTo(container) 
     .kendDropDownList({ 

     autoBind: false, 
     dataTextField="Text", 
     dataValueField="Value", 
     dataSource: { 
     type: "json", 
     transport:{ 
     read:{ 
      url: "../mycontroller/getstates", 
      method:"POST" 
      } 
      } 
      }, 
      }) 
      } 
      } 

      }) 
      } 
+0

"できない"と言ったら、どういう意味ですか?ドロップダウンにデータが入力されていませんか?コントローラメソッドが呼び出されていませんか?何かエラーがありますか? – Sandman

+0

両方が正常に読み込まれます。しかし、彼らはカスケードされていません。ユーザーがCountryオプションを選択した場合と同様に、Stateドロップダウンは選択されたCountryオプションに基づいて設定されます。 – Ali

答えて

0

あなたはStateDropDowncascadeFromタグが欠落している

は、ここに私のコード

コントローラです。

$('<input id="Statedropdown" data-text-field="Text" data-value- 
    field="Value" data-bind="value:'+options.field+'" />') 
    .appendTo(container) 
    .kendDropDownList({ 
     autoBind: false, 
     cascadeFrom: "Countrydropdown", 
     dataTextField="Text", 
     dataValueField="Value", 
     dataSource: { 
      type: "json", 
       transport:{ 
        read:{ 
         url: "../mycontroller/getstates", 
         method:"POST" 
        } 
      } 
     }, 
    }); 

注:あなたは(おそらくグリッドコントロールを通じて)、編集者を通じてドロップダウンをカスケード接続している場合は、どのようcascade drop downs within a gridの例を見つけることができます。

EDIT

Telerik液(すなわち都市の選択がドロップダウンの状態で使用可能な項目を駆動するドロップダウン)、2回のドロップダウンをチェーンのための別の解決策は実現可能ではない場合は、トリガchangeイベントを利用することができます都市からのアイテムの選択時にドロップダウンします。初期化時に

無効にStateDropDownをし、提供dataSource空:

$('<input id="Statedropdown" data-text-field="Text" data-value- 
    field="Value" data-bind="value:'+options.field+'" />') 
    .appendTo(container) 
    .kendDropDownList({ 
     enable: false, 
     autoBind: true, 
     cascadeFrom: "Countrydropdown", 
     dataTextField="Text", 
     dataValueField="Value", 
     dataSource: []    
    }); 

お使いのコントローラ機能にAJAX呼び出しを使用しますCountryDropDownからchangeイベント(getstates)として選択した国のidを提供するフックアップパラメータ:

$('<input id="Countrydropdown" data-text-field="Text" data-value- 
    field="Value" data-bind="value:'+options.field+'" />') 
     .appendTo(container) 
      .kendDropDownList({ 
      autoBind: false, 
      dataTextField="Text", 
      dataValueField="Value", 
      dataSource: { 
       type: "json", 
       transport:{ 
        read:{ 
         url: "../mycontroller/Details", 
         method:"POST" 
        } 
       } 
      }, 
      change: function(e) { 
       // extract item selected 
       var item = this.dataItem(); 

       $.ajax({ 
        type: "POST", 
        url: "/yourController/getstates",   
        data: JSON.stringify(item.ID), // ID of country selected 
        dataType: "json", 
        contentType: "application/json", 
        async: true, 
        success: function (response) { // response will contain listates returned from controller 
         var stateDropDown = $("#Statedropdown").data("kendoDropDownList")'; 
         // changed to use another approach to set dataSource       
         var dataSource = new kendo.data.DataSource({ 
          data: response 
         }); 
         stateDropDown.setDataSource(dataSource); 
        } 
       }); 
      } 
     }); 

コードがテストされていないため、にいくつかの調整が必要な場合があります10コール/ドロップダウンがグリッド内で使用されている場合(それがまだあるかどうかわからない)、stateDropDowncountryDropDownに最も近づける必要があるかもしれませんが、これは正しい軌道に乗るはずです。

EDIT

setDataSource機能を使用するためにAJAX呼び出しでsuccess方法を変更しました。剣道のドロップダウンに割り当てる前にresponseを使用してdataSourceを構築する必要があることに注意してください。

+0

実際にコーティングした例です。それらは配列を使用しており、モデル配列内に という名前の外部キーがあるので、カスケードタグがそれに取り組んでいます。 私の場合、getcitiesメソッドからTextとIDだけを渡しています。 – Ali

+0

あなたの状況でこれが実現できない場合は、カスケーディングの代わりに更新された答えを見てください。 – Sandman

+0

上記のコードを追加しました。しかし、再びSateDropdownListはポピュレートされません。 成功関数は正常に機能しています。しかし、stateDropDownはオブジェクト "応答"を受け取っていません。私はブラウザのコンソールをチェックしました。 "stateDropDown.datasource is undefined"というエラーが発生しました – Ali

関連する問題