Вы можете использовать событие change () первого раскрывающегося списка с jQuery:
$('#ddlStates').on('change', function() {
$.ajax({
type: "POST",
url: 'Controller/GetCities',
data: $(this).val(),
success: function(response) {
$('#ddlCities').html(response);
}
});
});
'Controller / GetCities' будет маршрутом к действию, которое возвращает частичное представление с новым списком городов<option>
s на основе выбранного значения, которое было опубликовано.
Действие, которое вы разместили, будет выглядеть примерно так:
[HttpPost]
public ActionResult GetCities(GetCitiesViewModel model)
{
var selectedState = model.ddlStates;
IEnumerable<CityViewModel> cities = GetCitiesInState(selectedState);
IEnumerable<SelectListItem> filteredItems =
cities.Select(c => new SelectListItem {Text = c.Name, Value = c.CityId.ToString()});
return PartialView("CityList", filteredItems);
}
private IEnumerable<CityViewModel> GetCitiesInState(int stateId)
{
// Just returning a list regardless of state ID. But you would look the cities up by state here.
return new List<CityViewModel>
{
new CityViewModel {CityId = 1, Name = "London"},
new CityViewModel {CityId = 2, Name = "Birmingham"},
};
}
public class CityViewModel
{
public int CityId { get; set; }
public string Name { get; set; }
}
public class GetCitiesViewModel
{
public int ddlStates { get; set; }
}
С видом примерно так:
@model System.Collections.Generic.IEnumerable<System.Web.Mvc.SelectListItem>
@{ Layout = null; }
@foreach (var city in Model)
{
<option value="@city.Value">@city.Text</option>
}