1
我使用DataAnnotations進行驗證(包括客戶端)asp.net MVC2驗證
我有多個字段的形式。單個字段的基本驗證正常工作。現在有至少一個需要有一個值的幾個字段(如果有三個字段,則第一個或第二個或第三個字段應該有一個值)。
我已經閱讀了很多關於這個網站和一些博客文章的文章。但是我找不到可以在上述場景中使用的解決方案。我可能錯過了某些東西或者做錯了。
你能幫忙嗎?
我使用DataAnnotations進行驗證(包括客戶端)asp.net MVC2驗證
我有多個字段的形式。單個字段的基本驗證正常工作。現在有至少一個需要有一個值的幾個字段(如果有三個字段,則第一個或第二個或第三個字段應該有一個值)。
我已經閱讀了很多關於這個網站和一些博客文章的文章。但是我找不到可以在上述場景中使用的解決方案。我可能錯過了某些東西或者做錯了。
你能幫忙嗎?
試試這個
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
public sealed class EitherOr : ValidationAttribute
{
private const string _defaultErrorMessage = "'{0}' OR '{1}' OR '{2}' must have a value";
private readonly object _typeId = new object();
public EitherOr(string prop1, string prop2, string prop3)
: base(_defaultErrorMessage)
{
Prop1 = prop1;
Prop2 = prop2;
Prop3 = prop3;
}
public string Prop1 { get; private set; }
public string Prop2 { get; private set; }
public string Prop3 { get; private set; }
public override object TypeId
{
get
{
return _typeId;
}
}
public override string FormatErrorMessage(string name)
{
return String.Format(CultureInfo.CurrentUICulture, ErrorMessageString, Prop1, Prop2,Prop3);
}
public override bool IsValid(object value)
{
if(string.IsNullOrEmpty(Prop1)&&string.IsNullOrEmpty(Prop2) && string.IsNullOrEmpty(Prop3))
{
return false;
}
return true;
}
然後標記與EitherOr屬性類:
[EitherOr("Bar","Stool","Hood", ErrorMessage = "please supply one of the properties")]
public class Foo
{
public string Bar{ get; set;}
public string Stool{ get; set;}
public string Hood{ get; set;}
}
請注意,我利用字符串屬性,如果你的屬性是其它類型的,makle一定要更改IsValid(object value)
驗證
謝謝Dusty,我應該在這種情況下寫什麼javacript驗證腳本?我仍然應該實現DataAnnotationsModelValidator並註冊它? – byte 2010-09-22 15:39:37
如果您使用默認的'Html.ValidationSummary',則不必編寫任何javascript。錯誤消息將顯示在您的驗證摘要中。但是,如果您希望它顯示在每個表單字段旁邊,您將不得不使用:ModelState.AddModelError(「Bar」,「requires a value」); – 2010-09-22 15:55:09
謝謝。這個驗證是否發生在服務器端呢?我正在查看客戶端的輸入驗證以及提供更好的用戶界面,並儘可能避免服務器旅程。服務器端驗證將始終存在。 – byte 2010-09-22 15:58:29