這裏有一個簡單的驗證屬性我寫了強制執行數隻字符串(我用它來驗證電話號碼,郵政編碼和一樣):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