2012-01-24 13 views
0

2つのコンボボックスがあります。 ComboBox1の値を変更しました、それがCombobox2ルートでこの値を入れた後、私は最初のComboBox1のからいくつかの値を取得する必要があるTelerikコンボボックスのクライアント側で経路値を設定する方法

databinding.Ajax()、(「アクション」、「コントローラ」を選択 - >ルート< < - 事前に)

@(Html.Telerik() 
.ComboBoxFor(m => m.Country) 
.ClientEvents(e => e.OnChange"onCountryChange")) 
.BindTo(Model.ListCountry)) 

    @(Html.Telerik() 
.ComboBoxFor(m => m.UnitOfAdministration) 
.ClientEvents(e => e.OnChange("onCityChange")) 
.BindTo(Model.ListUnitOfAdministration) 
.DataBinding(bind => 
bind.Ajax().Select("GetCityListByStr", "User",new { idCountry = "in this place i need put curent country ID" }) 
.Delay(1000)) 

function onCountryChange(e) { 
    var fildUnit = $("#fild_UnitOfAdministration"); 
    var fildStreet = $("#fild_Street").hide(); 
    var fildHouse = $("#fild_House").hide(); 
    var fildSegmentHouse = $("#fild_SegmentHouse").hide(); 
    var curCountry = Number(e.value); 
    if(curCountry.toString() == "NaN" || curCountry==0){ 
     fildUnit.hide(); 
    }else{ 
    $.post("@(Url.Action("GetCityList", "User"))", { id:curCountry, asd:Math.random() }, 
     function (data) {     
        fildUnit.show(); 
        var comboBox = $('#UnitOfAdministration').data('tComboBox');  
     comboBox.dataBind(data); 
        comboBox.select(0);      
     }); 
} 
} 

    [HttpPost] 
    public ActionResult GetCityList(string id) 
    { 

     int _id = id.ExtractID(); 
     ViewData["curCountry"] = _id; 
     List<SelectListItem> listSel = new List<SelectListItem>(); 
     listSel.Add(new SelectListItem() { Text = "Виберіть місто", Value = "0", Selected = true }); 
     TUnitOfAdministration un = TUnitOfAdministration.GetObject(_id); 
     if (un != null) 
     { 
      string sql = "lft>" + un.Lft + " AND RGT<" + un.Rgt + " AND TypeUnit in (2,3) order by Name"; 
      TypedBindingList list = TUnitOfAdministration.GetObjects(sql); 
      foreach (TUnitOfAdministration item in list) 
      { 
       listSel.Add(new SelectListItem { Text = item.Name, Value = item.ID.ToString() }); 
      } 
     } 
     return new JsonResult { Data = new SelectList(listSel, "Value", "Text", 0) }; 
    } 
[HttpPost] 
    public ActionResult GetCityListByStr(string text,string idCountry) 
    { 
     text = text.ClearStringFull(); 
     int _idCountry = idCountry.ExtractID(); 
     List<SelectListItem> listSel = new List<SelectListItem>(); 
     TypedBindingList list = new TypedBindingList(typeof(TUnitOfAdministration)); 
     listSel.Add(new SelectListItem() { Text = "Виберіть місто", Value = "0", Selected = true }); 
     TUnitOfAdministration country = TUnitOfAdministration.GetObject(_idCountry); 
     if (country != null) 
     { 
      string sqlAll = "ID_UnitOfAdministration = " + country.ID_UnitOfAdministration + " AND Name like '" + text + "%' Order by name"; 
      list = TUnitOfAdministration.GetObjects(sqlAll); 

      //if (list.Count == 0) 
      //{ 
      // string sql = "lft>" + country.Lft + " AND RGT<" + country.Rgt + " AND TypeUnit in (2,3) order by Name"; 
      // list = TUnitOfAdministration.GetObjects(sql); 
      //} 

      foreach (TUnitOfAdministration item in list) 
      { 
       listSel.Add(new SelectListItem { Text = item.Name, Value = item.ID.ToString() }); 
      } 
     } 
     return new JsonResult { Data = new SelectList(listSel, "Value", "Text", 0) }; 
    } 

感謝。

答えて

1

あなたが現在RouteDataからそれを取り出すことができます: countryIDは、使用しているルート・パラメータの名前です

new { curentCountry = ViewContext.RouteData.Values["countryID"] } 

。それは、クエリ文字列の一部ではなく、あなたのルートの一部であった場合または:

new { curentCountry = Request["countryID"] } 

あなたが提起されOnDataBindingイベントをサブスクライブすることができるかを示しdocumentationを見てとることができデータをフェッチする要求がなされている。

ですから、OnDataBindingイベントをサブスクライブすることができます:

@(Html.Telerik() 
     .ComboBoxFor(m => m.UnitOfAdministration) 
     .ClientEvents(e => e.OnDataBinding("onComboBoxDataBinding")) 
     .BindTo(Model.ListUnitOfAdministration) 
     .DataBinding(bind => bind.Ajax().Select("GetCityListByStr", "User") 
     .Delay(1000) 
) 

とあなたがそれをクライアント側... ComboBox1のは知りませんcombobox2を変更したときに選択された何値この要求

<script type="text/javascript"> 
    function onComboBoxDataBinding(e) { 
     e.data = $.extend({ }, e.data, { curentCountry: "customValue"}); 
    } 
</script> 
+0

に追加の引数を渡すことができます。私は理解している限り経路 –

+0

に入れません..クライアントのイベントonBindを使用し、この関数でajaxリクエストを作成する必要があります –

+0

@Sasha、申し訳ありませんが、私はあなたの要件を誤解しました。私は私の答えを更新しました。 –

関連する問題