这是一个奇怪的问题,我希望有人能找到解决方案。我有基本相同的视图,使用带有 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 以侦听更改。任何想法将不胜感激。