2013-11-15 5 views
1

Как правильно сделать свой выпадающий список с помощью правильной информации из модели, когда я делаю редактирование MVC? В моем редактировании используется динамическое раскрывающееся меню, заполненное вызовом jquery $ .ajax.Как сделать MVC Edit с динамическим раскрывающимся списком javascript

Вот мой выпадающий на мой взгляд ...

@Html.DropDownListFor(m => m.SubdivisionID, new SelectList(new List<SelectListItem>(), 
        "SubdivisionID", "SubdivisionName", Model.SubdivisionID)) 

Я делаю $ .ajax вызов и выпадающий заполняется все варианты после прогонов вызова $ .ajax, но выпадающий просто выбирает первый в списке. Как получить раскрывающийся список для обновления с помощью информации о модели?

Например, выпадающий список может иметь выбор Item1 или Item2. Модель имеет «Item2», сохраненную как SubdivisionID, однако после вызова $ .ajax выпадающий список имеет «Item1» в списке, потому что Item1 является первым элементом в списке.

Что делать, чтобы выпадающий список выбрал правильный элемент в Edit?

Это мой JavaScript для вызова $ .ajax ...

function getSubdivisions() { 
    custId = $('#CustomerID').val(); 

    // remove all of the current options from the list 
    $('#SubdivisionID').empty(); 

    // send request for list of subdivisions 
    var jqxhr = $.ajax({ 
     url: '/Schedule/getSubdivisions', 
     type: 'POST', 
     data: '{ customerId: ' + custId.toString() + ' }', 
     contentType: 'application/json; charset=utf-8', 
     dataType: 'json', 
     cache: false, 
     async: true 
    }); 

    // received list of models... 
    jqxhr.done(function (data) { 
     if (data == null) return; 

     try { 
      var ddl = $('#SubdivisionID'); 

      // add each item to DDL 
      $.each(data, function (index, value) { 
       ddl.append($('<option></option>', { value: data[index].SubdivisionID }).html(data[index].SubdivisionName)) 
      }); 
     } 
     catch (ex) { 
      alert("Done, but with errors!\n" + ex.message); 
     } 
    }); 

    // failed to retrieve data 
    jqxhr.error(function (result, errorText, thrownError) { 
     alert("Error! Failed to retrieve models! " + errorText + "\n" + thrownError); 
    }); 
} 

UPDATE 1: Я изменил свой DropDown Razor код, и он по-прежнему не работает (см. Выше) MVC никогда не выбирает правильный элемент списка. Я бы предпочел, чтобы MVC обрабатывал выбор элемента по сравнению с тем, что мне нужно было выбрать выбранный элемент из JavaScript. Мой JavaScript находится в отдельном файле, и в настоящее время я не передавал никаких параметров.

UPDATE 2: Я добавил к моему мнению следующий JavaScript, и я обновил свой JavaScript, чтобы включить ответ Мэтта.

<script type="text/javascript"> 
    var js_doEdit = true; 
    var subdivisionId = @Model.SubdivisionID 
</script> 

ответ

1

вы должны быть в состоянии установить выбранный пункт в выпадающем списке после ее воссоздания как этот

$('#SubdivisionID').val('@Model.SubdivisionID'); 

вам может понадобиться добавить отборное к селектору, как это

$('#SubdivisionID select').val('@Model.SubdivisionID'); 

Надеюсь, что это поможет

+0

Возможно, мне придется это сделать. В любом случае, я могу использовать MVC вместо того, чтобы делать это с помощью JavaScript? – Targaryen

+0

Поскольку вы перестраиваете раскрывающееся меню после загрузки страницы, MVC не знает об изменении, чтобы иметь возможность повлиять на него. Это единственный способ, которым я знаю это. –

0

2 Способы решения проблемы:

1.

$("#YourDropDownList").val(@Model.SubdivisionID); 

2.

@Html.DropDownListFor(m => m.SubdivisionID, new SelectList(new List<SelectListItem>()),"SubdivisionID","Text") 

Это будет автоматически соответствовать вашим DataValue с "SubdivisionID".

+0

См. Обновленный вопрос (см. Выше). Я не хочу использовать JavaScript для фактического выбора, если я могу ему помочь, а вариант №2, который вы дали, не работает для меня. – Targaryen

Смежные вопросы