自定义数据注释,以根据其他值隐藏属性

时间:2015-05-28 16:22:24

标签: c# asp.net-mvc-4 data-annotations angularjs-injector

有一个噩梦把这个弄清楚,我现在平坦地靠在砖墙上

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

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

E.g

我有一个是或否的下拉。

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

我可以用JS实现这个目标,但是将它作为模型的简单数据注释将会很好。

E.g [HideField(" dropdown"," no")]

提前致谢

1 个答案:

答案 0 :(得分:0)

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

如果您已经在使用jQuery,那么这样的事情就可以了。这是jsFiddle

frame.origin.y

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

** 编辑 ** 来自评论:

  

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

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

Site.JS

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

然后在你想要使用它的每个页面中,将它连接起来:

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

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