Это странная проблема, и я надеюсь, что кто-то сможет найти решение. По сути, у меня есть те же представления, которые используют раскрывающийся список с функцией jQuery, которая показывает и скрывает поле в зависимости от выбора, сделанного в раскрывающемся списке. У меня это работает в представлении создания с использованием ViewBag для передачи списка выбора для раскрывающегося списка. Мне было интересно, могу ли я сделать то же самое в своем представлении редактирования, используя модель представления и помощник DropDownListFor.
Функция JQuery в режиме создания:
$("#GenderId").change(function () {
if ($("#SelectedGenderId").val() == 3) {
$(".gender-description").show();
} else {
$(".gender-description").hide();
}
});
И создать представление:
<div class="editor-label">
@Html.LabelFor(model => model.GenderId, "Gender")
</div>
<div class="editor-field">
@Html.DropDownList("GenderId", (SelectList)ViewBag.GenderId, "--Select One--", new { id = "GenderId" })
@Html.ValidationMessageFor(model => model.GenderId)
</div>
<div class="gender-description">
<div class="editor-label">
@Html.LabelFor(model => model.GenderDescription)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.GenderDescription)
@Html.ValidationMessageFor(model => model.GenderDescription)
</div>
</div>
Чтобы мои раскрывающиеся списки представления «Редактировать» работали правильно, я изменил свою методологию на модель представления вместо ViewBag (на которую, я думаю, я также захочу изменить свое представление «Создать», если я смогу заставить представление редактирования работать правильно).
Редактировать вид:
<div class="editor-label">
@Html.LabelFor(model => model.Client.GenderId, "Gender")
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.SelectedGenderId, Model.Genders)
@Html.ValidationMessageFor(model => model.Client.GenderId)
</div>
<div class="gender-description">
<div class="editor-label">
@Html.LabelFor(model => model.Client.GenderDescription)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Client.GenderDescription)
@Html.ValidationMessageFor(model => model.Client.GenderDescription)
</div>
</div>
Просмотр модели:
public class ClientViewModel
{
public Client Client { get; set; }
[Display(Name = "Client Gender")]
public string SelectedGenderId { get; set; }
public IEnumerable<SelectListItem> Genders { get; set; }
[Display(Name = "Client Setting")]
public string SelectedSettingId { get; set; }
public IEnumerable<SelectListItem> Settings { get; set; }
}
Привязка ViewModel работает, и раскрывающиеся списки заполняются существующим выбором, который я не мог заставить работать правильно с помощью ViewBag (именно поэтому я в первую очередь перешел на ViewModel вместо ViewBag). Я не уверен, как бы я изменил функцию jQuery, чтобы связать ее с DropDownListFor для прослушивания изменений. Любые идеи будут очень признательны.