1

我是 MVC 的新手,所以我认为我需要指出正确的方向。

我的模型中有一个布尔值,它使用以下方法在我的视图中创建一个复选框:

@Html.EditorFor(model => model.Adults)

我还有一个下拉框,它显示 ViewBag 中的内容。我想根据该复选框的条件显示不同的 ViewBag 集。

我可以通过在我的 html 中使用 Razor 语法检查我的 mode.Adults 变量来做到这一点,但这仅适用于我的编辑页面,而不适用于创建页面。此外,当我单击复选框时它不起作用(我需要在下拉列表中重新加载新值)。

我希望避免使用 jQuery 发回服务器,而是全部在客户端进行。但是,如果这是唯一的方法,那么有人可以帮助您如何做到这一点。

4

1 回答 1

5

我希望避免使用 jQuery 发回服务器,而是全部在客户端进行。

您可以将 2 个列表直接序列化到您的视图中。然后订阅.change复选框的事件并切换下拉值:

<script type="text/javascript">
    // This assumes that ViewBag.List1 and ViewBag.List2 are IEnumerable<SelectListItem>
    var list1 = @Html.Raw(ViewBag.List1);
    var list2 = @Html.Raw(ViewBag.List2);

    $(function() {
        $('#Adults').change(function() {
            var checked = $(this).is(':checked');
            setDropDownValues(checked);
        });
    });

    function setDropDownValues(checked) {
        var dropDown = $('#id_of_your_drop_down');
        dropDown.empty();
        var list = checked ? list1 : list2;
        $.each(list, function() {
            dropDown.append('<option/>', {
                value: this.Value,
                html: this.Text
            });
        });
    }
</script>
于 2013-10-03T15:42:49.600 回答