使用Data Annotations指定模型的验证规则,我想设置Required属性的初始值,以便在它等于该值时失败。这是使用验证控件的webforms中的一个选项,但我没有看到类似的使用数据注释。
如果没有内置的方法,我可能只是构建一个从中继承的新的必需属性。
更新:根据评论/答案,我肯定知道这不是一个理想的情况,我应该使用HTML5的占位符属性。但是,我需要对已经以非理想方式添加阴影文本的现有表单执行此操作。
答案 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中编写代码以进行客户端验证。
参考此
答案 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)
(我完全做了,你可以实现它。)