Skip to content

Use the MVC ComboBox extension to implement cascading combo boxes

License

Notifications You must be signed in to change notification settings

DevExpress-Examples/asp-net-mvc-cascading-combo-boxes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ComboBox for ASP.NET MVC - How to Implement Cascading Combo Boxes

This example demonstrates how to use the MVC ComboBox extension to implement cascading combo boxes.

MVC - Cascading Combo Boxes

Setup Combo Boxes and Their Items

Set up the primary CountryPartial.cshtml and the secondary CityPartial.cshtml combo boxes as partial views, specify their CallbackRouteValues properties, and call the BindList method to bind the data obtained from the controller to the combo boxes.

// Index.cshtml
@Html.Partial("CountryPartial", Model)
@Html.Partial("CityPartial", Model)

// CountryPartial.cshtml
@Html.DevExpress().ComboBox(settings => {
    ...
    settings.CallbackRouteValues = new { Controller = "Home", Action = "CountryPartial" };
    settings.Properties.ValueType = typeof(int);
    settings.Properties.TextField = "Name";
    settings.Properties.ValueField = "ID";
    ...
}).BindList(CS.Models.Country.GetCountries()).Bind(Model.Country).GetHtml()

// CityPartial.cshtml
@Html.DevExpress().ComboBox(settings => {
    ...
    settings.CallbackRouteValues = new { Controller = "Home", Action = "CityPartial" };
    settings.Properties.ValueType = typeof(int);
    settings.Properties.TextField = "Name";
    settings.Properties.ValueField = "ID";
    ...
}).BindList(CS.Models.City.GetCities(Model.Country)).Bind(Model.City).GetHtml()

Respond to a Selection Change and Initiate a Callback

Handle the primary combo box's client-side SelectedIndexChanged event. In the event handler, call the client-side PerformCallback method of the secondary combo box. Use the ComboBoxProperties.Name property value to access the combo box.

// CountryPartial.cshtml
@Html.DevExpress().ComboBox(settings => {
    settings.Name = "Country";
    ...
    settings.Properties.ClientSideEvents.SelectedIndexChanged = "function(s, e) { City.PerformCallback(); }";
    ...

// CityPartial.cshtml
@Html.DevExpress().ComboBox(settings => {
    settings.Name = "City";
    ...

Filter Data Source Items

Handle the secondary combo box's client-side BeginCallback event. In the handler, pass the selected value of the primary combo box as a custom callback parameter. Handle the secondary combo box's CallbackRouteValues.Action method to populate the combo box values based on the passed primary combo box's value.

// CityPartial.cshtml
@Html.DevExpress().ComboBox(settings => {
    ...
    settings.Properties.ClientSideEvents.BeginCallback = "function(s, e) { e.customArgs['Country'] = Country.GetValue(); }";
    ...

// HomeController.cs
public ActionResult CityPartial() {
    int country = (Request.Params["Country"] != null) ? int.Parse(Request.Params["Country"]) : -1;
    return PartialView(new Customer { Country = country });
}

Documentation

Files to Look At

More Examples

Does this example address your development requirements/objectives?

(you will be redirected to DevExpress.com to submit your response)