Наконец мой каскадный выпадающий список работает только для того, чтобы обнаружить, что он не заполняется в режиме редактирования. Заполняется первый выпадающий список, и я настроил запуск jquery либо при изменении выпадающего меню, либо при готовности документа. Я установил предупреждение в JQuery, но он не входит в функцию в контроллере, чтобы раскрыть соответствующий список для второго раскрывающегося списка. Кто-нибудь знает, где я могу пойти не так?
Вот код - в основном я выбираю авиакомпанию, а оттуда выбираю из списка рейсов, связанных с этой авиакомпанией:
Вид:
<div class="editor-field">
@Html.DropDownListFor(x => x.FlightTime.AirlineID, Model.Airlines, "Select Airline")
@Html.ValidationMessageFor(model => model.AirlineID)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.FlightID, "Flight")
</div>
<div class="editor-field">
@Html.DropDownListFor(x => x.FlightTime.FlightID, Model.Flights, "Select Flight")
<a href="#" class="flight">Add new</a>
@Html.ValidationMessageFor(model => model.FlightTime.FlightID)
</div>
etc...
jQuery in View
$(document).ready(function () {
var id = $('select#FlightTime_AirlineID').val();
populate(id);
$("#FlightTime_AirlineID").change(function () {
var id = $('select#FlightTime_AirlineID').val();
populate(id);
});
function populate(id) {
alert('hello');
//The line below is where it stops
$.get('../FlightTime/GetFlightList/' + id, function (response) {
var flights = $.parseJSON(response);
var ddlSelectedFlight = $("#FlightTime_FlightID");
// clear all previous options
$("#FlightTime_FlightID > option").remove();
// populate the products
for (i = 0; i < flights.length; i++) {
ddlSelectedFlight.append($("<option />").val(flights[i].Value).text(flights[i].Text));
}
if (flights.length == 0) {
ddlSelectedFlight.append($("<option />").val('').text('No flights added'));
}
});
}
});
Функция контроллера, в которую он должен войти:
public string GetFlightList(string id)
{
var flightList = this.GetFlights(Convert.ToInt32(id));
var myData = flightList.Select(a => new SelectListItem()
{
Text = a.FlightNumber,
Value = a.FlightID.ToString()
});
string text = new JavaScriptSerializer().Serialize(myData);
return text;
}
ViewModel
public class FlightTimeViewModel
{
private List<SelectListItem> _airlines = new List<SelectListItem>();
private List<SelectListItem> _flights = new List<SelectListItem>();
[DisplayName("Airline")] //Selected Value
[Required(ErrorMessage = "Please select an airline")]
public string AirlineID { get; set; }
[DisplayName("Flight")] //Selected Value
[Required(ErrorMessage = "Please select a flight")]
public string FlightID { get; set; }
public List<SelectListItem> Flights
{
get { return _flights; }
}
public List<SelectListItem> Airlines
{
get
{
foreach (Airline a in TimeTable.Repository.AirlineRepository.GetAirlineList())
{
_airlines.Add(new SelectListItem() { Text = a.AirlineName.ToString(), Value = a.AirlineID.ToString() });
}
return _airlines;
}
}
public FlightTime FlightTime { get; set; }
}
Функция отлично работает в режиме создания, но останавливается в строке jQuery сразу после предупреждения в режиме редактирования. Я боролся с Viewmodels / выпадающими списками, но думал, что я понял это до этого.
Спасибо