0

这是一个奇怪的问题,我希望有人能找到解决方案。我有基本相同的视图,使用带有 jQ​​uery 函数的下拉列表,根据下拉列表框中的选择显示和隐藏字段。我在创建视图中使用 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 以侦听更改。任何想法将不胜感激。

4

1 回答 1

0

您可以将 id 传递给您的 html 助手,如下所示:

@Html.DropDownListFor(model => model.SelectedGenderId, Model.Genders, new {id="GenderId"} )

或者

您可以将 jquery 函数绑定在 name 上Genders,如下所示:

$("[name*='Genders']").change(function () {
    if ($("#SelectedGenderId").val() == 3) {
        $(".gender-description").show();
    } else {
        $(".gender-description").hide();
    }
});
于 2013-08-31T06:25:02.743 回答