设置Required属性的初始值

时间:2011-08-01 17:37:13

标签: .net asp.net-mvc-3 validation data-annotations

使用Data Annotations指定模型的验证规则,我想设置Required属性的初始值,以便在它等于该值时失败。这是使用验证控件的webforms中的一个选项,但我没有看到类似的使用数据注释。

如果没有内置的方法,我可能只是构建一个从中继承的新的必需属性。

更新:根据评论/答案,我肯定知道这不是一个理想的情况,我应该使用HTML5的占位符属性。但是,我需要对已经以非理想方式添加阴影文本的现有表单执行此操作。

4 个答案:

答案 0 :(得分:2)

我不会在MVC中处理它,我会努力让阴影文本不用表单发布。 HTML 5有“占位符”。我会使用它或实现类似的东西:http://davidwalsh.name/html5-placeholder

检查一下这个简单的快速占位符方法,该方法在非html5浏览器中正常降级:

JQuery placeholder HTML5 simulator

只需将占位符属性添加到文本框中,并使用该javascript使其无论HTML版本如何都可以使用。

答案 1 :(得分:0)

我不知道 notequalto 是否有可用的内置注释,但您可以创建自己的NotEqualAttribute,继承ValidationAttribute(用于服务器上的验证)和实现IClientValidatable(生成data-something标签,在客户端进行验证。)

此外,您还必须在jquery中编写代码以进行客户端验证。

参考此

How does DataAnnotations really work in MVC?

答案 2 :(得分:0)

我最终创建了一个继承自RequiredAttribute的新属性:

public class RequiredWithInitialValueAttribute : RequiredAttribute
{
    public string InitialValue { get; set; }

    public RequiredWithInitialValueAttribute(string initialValue)
    {
        InitialValue = initialValue;
    }

    public override bool IsValid(object value)
    {
        if (value.ToString().SafeEquals(InitialValue)) return false;
        return base.IsValid(value);
    }
}

仍然很好奇,如果有更好的方法,因为这似乎应该内置的东西,但现在我正在使用它。

答案 3 :(得分:0)

不要这样做。

占位符文字值。 应该发布。它应进行验证 这与常识相矛盾,是一种危害人类罪,并引入了一些问题。

  • 如果您需要带有占位符文字的可选数字字段,该怎么办?
    (验证将失败,因为占位符是一个字符串。)

  • 当您的应用程序本地化时会发生什么?
    (验证将失败,直到有人发现正在与此属性值进行比较。)

  • 验证必须仅限服务器,并且无法“灰显”占位符文字。
    (除非您在脚本文件中再次指定占位符 并监视更改事件。)

  • 您必须至少两次并在不同的地方指定此“占位符”。
    (如果我说得对,它只在属性中一次,在构造函数中一次。)

  • 占位符无法实际 值。
    (如果不是这个字段,则会发生这种情况,然后对于使用该属性的任何其他字段都会发生。)

  • 这将使未来的维护者感到震惊。
    (你甚至怀疑吗?)

相反,

使用placeholder属性和降级解决方案 as suggested by Milimetric

作为不安分DYI-ers的替代方案,将标签放在div中,并使用您自己的JavaScript将其放在输入字段上。这被称为“overlabel”技术,网上有很多例子。 (但您必须在要支持的浏览器上彻底测试您的解决方案。)您甚至可以推出自己的custom HTML helper

@Html.PlaceholderFor(m => m.SomeField)

(我完全做了,你可以实现它。)