Повторное заполнение каскадного выпадающего списка в режиме редактирования - MVC - PullRequest
2 голосов
/ 01 декабря 2011

Наконец мой каскадный выпадающий список работает только для того, чтобы обнаружить, что он не заполняется в режиме редактирования. Заполняется первый выпадающий список, и я настроил запуск 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 / выпадающими списками, но думал, что я понял это до этого.

Спасибо

1 Ответ

1 голос
/ 01 декабря 2011

Не могли бы вы попробовать:

$("#FlightTime_AirlineID").change(function () {
        var id = $('select#FlightTime_AirlineID').val();
        populate(id);
    }).change();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...