Можно изначально присвоить значение свойства переменной javascript и использовать его для установки значения выбранного параметра в обратном вызове ajax после добавления параметров.
// Store initial value
var selectedId = @Html.Raw(Json.Encode(Model.Subject.SubjectID))
var subjects = $('.subjects'); // cache it
$.getJSON(url, function (response) {
$.each(response, function (index, item) {
subjects.append($('<option></option>').text(item.Text).val(item.ID));
});
// Set selected option
subjects.val(selectedId);
});
Однако неясно, почему вы делаете вызов ajax, если только вы не генерируете каскадные выпадающие списки, что, похоже, не так. То, что вы делаете, в основном говорит клиенту - вот некоторые данные, но я забыл отправить то, что вам нужно, поэтому потратьте еще немного времени и ресурсов на установление другого соединения для получения остальных данных . И ты ничего не кешируешь, несмотря на то, что думаешь.
Если, с другой стороны, ваше свойство Subject
фактически является набором объектов (в этом случае оно должно быть Subjects
- множественное число), то правильный вариант с использованием EditorTemplate
объясняется в варианте 1 этот ответ .
Обратите внимание также, что если Subject
является коллекцией, то приведенный выше код var selectedId = ..
необходимо изменить, чтобы сгенерировать массив значений SubjectID
, например
var selectedIds = @Html.Raw(Json.Encode(Model.Subject.Select(x => x.SubjectID)))
, и тогда каждое значение выпадающего списка необходимо будет установить в цикле
$.each(subjects, function(index, item) {
$(this).val(selectedIds[index]);
});