4

Я пытаюсь сделать каскад выпадающих списков, в которых изменения в странах получат состояния и свяжутся с другим выпадающим списком, в котором отображаются состояния. Я проверил документацию, доступную на веб-сайте kendoui, где они задокументировали способ каскадирования с использованием его событий (CascadeFrom и т. Д.), Но я не хочу этого делать. Поскольку это двойная поездка в базу данных. Сначала после загрузки страницы она связывает страны (Calls database и get countries), а затем связывает состояния после изменения страны.Каскадирование Kendo Dropdownlist с объектом json

Но я сделал по-другому. Я связываю страны Dropdownlist на загрузке страницы, поэтому я сохранил одну поездку, которая была сделана в базу данных для загрузки стран после загрузки страницы, но мне интересно, могу ли я назвать изменение выпадающего списка стран следующим образом, а затем связать состояния json объект.

Это страны выпадающая которая успешно переплетена в странице просмотра

@(Html.Kendo().DropDownListFor(model => model.Country) 

             .DataTextField("Text") 

             .DataValueField("Value") 

             .BindTo(Model.CountriesTemp) 

            ) 

Ниже список государств, которые будут получать записи на основе изменений в странах выпадающие.

@(Html.Kendo().DropDownListFor(model => model.State) 
             .DataTextField("Text") 
             .DataValueField("Value") 
             .BindTo(Model.States)) 

Для привязки стран и состояний с загрузкой страницы, я сделал это в контроллере.

public class HomeController : Controller 
    { 
    public ActionResult Registration() 
     { 
      RegistrationModel Model = new RegistrationModel(); 

      Model.CountriesTemp = new SelectList(ObjService.GetCountries(), "CountryID", "Country_Name"); 
      Model.States = new SelectList(ObjService.GetStates(), "Id", "StateName"); 
    return View(Model); 
     } 

      public JsonResult GetStatesForCountry(string CountryId) 
     { 
      RegistrationService ObjService = new RegistrationService(); 
      var StatesList =ObjService.GetStatesForCountries(Convert.ToInt32(CountryId)); 
      return Json(new { JsonStates = StatesList }); 
     } 
}   

Это моя модель ::

public SelectList CountriesTemp { get; set; } 
public SelectList States { get; set; } 

Я успешно переплетены оба выпадающие, сейчас я хочу сделать каскадный, для которого я написал ниже сценарий в моей странице просмотра:

И функция «GetStatesForCountry» уже определена в контроллере выше, но я смущен тем, как использовать возвращаемый объект json и привязать список kendodropdown, который показывает «состояния».

ответ

4

Вы должны получить состояние выпадающего списка установите источник данных, возвращаемый из него следующим образом:

var dropdownlist = $("#State").data("kendoDropDownList"); 
dropdownlist.setDataSource(Response.JsonStates); 

Дополнительная информация:

http://docs.telerik.com/kendo-ui/api/javascript/ui/dropdownlist#methods-setDataSource

+0

Hi. Он начал связывать новые данные (состояния), которые появляются после смены страны, но, к сожалению, она не указана во всех вариантах. У вас есть идея об этом? – Sweetie

+0

Я могу сделать это, выполнив приведенный ниже код. $ .post ("/ Home/GetStatesForCountry", {CountryId: val}, function (Response) { // var States = $ ("# State"). Data ("kendoDropDownList"); //States.setDataSource (Response.JsonStates); $ ("# State"). KendoDropDownList ({ dataTextField: "StateName", dataValueField: "Id", dataSource: Response.JsonStates }); }); – Sweetie

+0

@sweetie nice one, извините, только что просмотрел ваши комментарии сейчас. :) – hutchonoid

3

Я могу сделать это, используя приведенный ниже код. Вышеприведенный ответ был использован в качестве ссылки.

$.post("/Home/GetStatesForCountry", { CountryId: val }, function (Response) { 
      //var States = $("#State").data("kendoDropDownList"); 
      //States.setDataSource(Response.JsonStates); 
      $("#State").kendoDropDownList({ 
       dataTextField: "StateName", 
       dataValueField: "Id", 
       dataSource: Response.JsonStates 
      }); 

     });