这里有一个简单的验证属性我写了强制执行数只字符串(我用它来验证电话号码,邮政编码和一样):ValidationAttribute的值总是空
public class NumericAttribute : ValidationAttribute {
public NumericAttribute() {
ErrorMessage = SharedModelResources.ValidationStrings.Numeric; // Message coming from a .resx file
}
public override bool IsValid(object value) {
string stringValue = value as string;
if (stringValue.IsNotNull())
foreach (var c in stringValue)
if (!char.IsDigit(c))
return false;
return true;
}
}
的问题是,使用时验证不是字符串,比方说,一个小数,短,int或别的什么,object value
总是null
。为什么要验证仅限数字的小数?因为如果我不这样做,我得到默认的验证消息“值‘X’无效‘propertyName的’。我意识到默认验证消息的特定问题的解决方案。
我只是想知道为什么它总是空...
顺便说一句,我使用VS2008,ASP.NET MVC 2(最终),.NET 3.5 SP1。
创建一个简单的测试属性,逐行扫描:`value`为空,除了字符串。 – BrunoSalvino 2010-12-01 00:55:40
非常神秘,因为像decimal或short或int这样的数字属性首先不能为null。我的猜测是,你需要在调试器中返回堆栈以查看“value”来自哪里,以了解为什么传入null。无论如何,如果确实得到小数或小数或一个int作为`value`传入,`as`将失败,`stringValue`将为空。 – mlibby 2010-12-01 01:03:06
是的,明白了。更多的测试,在这里我去...谢谢! – BrunoSalvino 2010-12-01 01:04:07