如何在Telerikcombobox的客户端设置路由值

我有两个combobox。 我需要在combobox1更改值之后从第一个combobox1获取一些值,并将此值放在Combobox2路径中

。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 listSel = new List(); 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 listSel = new List(); 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) }; } 

提前致谢。

您可以从当前的RouteData获取它:

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

其中countryID是您正在使用的路由参数的名称。 或者,如果它是查询字符串的一部分而不是您的路线的一部分:

 new { curentCountry = Request["countryID"] } 

您可以查看文档 ,该文档说明了如何订阅在获取数据请求时引发的OnDataBinding事件:

所以你可以订阅OnDataBinding事件:

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

并允许您将其他参数传递给此请求