0

做了一场噩梦来解决这个问题,我现在正靠在砖墙上

使用 MVC 框架,我基本上构建了一个简单的表单。我保持视图尽可能简单,只使用 editorForModel()

所以在这个表单模型中,我使用数据注释来为属性添加更多的自定义。我想创建一个自定义数据注释,它将根据另一个属性的值隐藏它所针对的属性。

例如

我有一个是或否的下拉菜单。

还有一个名称字段。当下拉列表为 no 时,它会隐藏表单中的名称字段。

我可以使用 JS 来实现这一点,但如果将其作为模型的简单数据注释,那就太好了。

例如 [HideField("dropdown", "no")]

提前致谢

4

1 回答 1

0

您将希望在客户端而不是服务器端(使用属性)处理此问题。

如果您已经在使用 jQuery,那么可以这样做。这是jsFiddle

$(function () {
    var dropdown = $('#dropdown').change(function (event) {
        if ($(this).val() == "no") {
            $('#fieldToHide').hide();
        } else {
            $('#fieldToHide').show();
        }
    });
});

您想在客户端执行此操作的原因非常简单,任何其他方法都需要在每次更改下拉列表时进行回发以检查值..

**编辑** 来自评论:

是否可以将此 JavaScript 注入页面... ...而不是在每个页面上复制本质上相同的脚本

这可以重写,更通用一点,因此可以在不同的页面上重用。将它添加到 yoursite.js (你应该已经拥有..),然后根据需要简单地将其连接到每个页面上。更新了 jsFiddle

网站.JS

function hideIf(selectField, hideField, hideValue) {
    $(selectField).change(function (event) {
        if ($(this).val() == hideValue) {
            $(hideField).hide();
        } else {
            $(hideField).show();
        }
    });
}

然后在你想使用它的每个页面中,像这样连接它:

$(function () {
    hideIf("#dropdown", "#fieldToHide", "no");
});

这样,您可以在不同的选择字段上多次调用 hideIf 而无需重写上面的脚本..

于 2015-05-28T17:07:07.757 回答