2011-12-02 82 views
2

我正在尋找一種方法來檢查兩個文本框的形式,以確保其中至少有一個被填充。只有當兩個文本框都爲空時,驗證纔會失敗。有沒有簡單的方法來使用Unobtrusive JScript和MVC3表單驗證來做到這一點? 感謝MVC3驗證的文本框一個或另一個需要

回答

3

您可以實現這樣的事情answer by Darin Dimitrov

它說明了如何使自己的自定義驗證(客戶端和服務器端上)。它將使用MVC3驗證和JQuery不顯眼的驗證。您可以檢查是否滿足條件(選中一個或多個複選框)並基於該條件進行驗證。

+0

這很好,謝謝! – jiggawagga

0

的Javascript,你可以做使用jQuery

$(document).ready(function(){ 
    var inp = $("#txt").val(); 
    var inp2 = $("#txt2").val(); 
    if(jQuery.trim(inp).length < 0 && jQuery.trim(inp2).length < 0) 
    { 
    //show your message. 
    } 
}) 
+0

這是一個有點不完整。它是一個或另一個。 –

+0

我編輯了我的答案,他提到如果兩個文本框都是空的,那麼驗證應該會失敗? – FosterZ

+0

是的,這是關鍵。現在好了。 –

0

這樣你可以看一下條件驗證解釋下面提到的文章

http://blogs.msdn.com/b/simonince/archive/2010/06/04/conditional-validation-in-mvc.aspx

你可以把[RequiredIf]屬性在兩個文本框中檢查textBox1是否爲空,則需要textbox2,反之亦然。

+0

我添加了類,但它似乎不起作用。我想,以檢查是否文本框爲空的屬性應該simalr這樣: [RequiredIf(「姓氏」,「」,的ErrorMessage =「姓氏或名字必須包含一個值」)] 但補充說,這兩個姓氏和名字(當然帶有逆標籤)不會做任何事情 – jiggawagga

+0

你必須缺少一些東西..下載文章底部給出的代碼並理解它是如何工作的,然後你可能會弄清楚你是什麼在應用程序中丟失。 – pramodtech

+0

這就是我做到的。我不知道爲什麼它不起作用,但我最終使用了semaz的類似解決方案,但與我的問題完全相關。謝謝你。 – jiggawagga

0

這裏是AtLeastOneRequired驗證的礦山版本支持DisplayAttribute:

[AttributeUsage(AttributeTargets.Property)] 
public class AtLeastOneRequiredAttribute : ValidationAttribute 
{ 
    private readonly string[] _members; 

    public AtLeastOneRequiredAttribute(params string[] members) 
    { 
     _members = members; 
    } 

    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     if (_members == null || _members.Length < 1) 
      return null; 

     var displayNames = new List<string>(); 

     foreach (var member in _members) 
     { 
      var propertyInfo = validationContext.ObjectType.GetProperty(member); 
      if (propertyInfo == null) 
       throw new InternalErrorException("Property '{0}' cannot be found in '{1}'", member, validationContext.ObjectType); 

      var propertyValue = propertyInfo.GetValue(validationContext.ObjectInstance); 

      var stringValue = propertyValue as string; 
      if (stringValue != null && stringValue.Trim().Length != 0) 
       return ValidationResult.Success; 

      var displayAttribute = propertyInfo.GetCustomAttribute<DisplayAttribute>(); 
      displayNames.Add(displayAttribute != null ? displayAttribute.Name : member); 
     } 

     return new ValidationResult(FormatErrorMessage(String.Join(", ", displayNames))); 
    } 
} 

而且非常簡單的模型:

public class FeedbackPostModel 
{ 
    [Display(Name = "Phone")] 
    [AtLeastOneRequired("SenderPhone", "SenderEmail", ErrorMessageResourceName = "ValidationAtLeastOnRequired", ErrorMessageResourceType = typeof(Strings))] 
    [StringLength(256, ErrorMessageResourceName = "ValidationFieldStringLengthMax", ErrorMessageResourceType = typeof(Strings))] 
    [Phone(ErrorMessageResourceName = "ValidationFieldPhoneFormat", ErrorMessageResourceType = typeof(Strings))] 
    public string SenderPhone { get; set; } 

    [Display(Name = "Email")] 
    [StringLength(256, ErrorMessageResourceName = "ValidationFieldStringLengthMax", ErrorMessageResourceType = typeof(Strings))] 
    [EmailAddress(ErrorMessageResourceName = "ValidationFieldEmailAddress", ErrorMessageResourceType = typeof(Strings))] 
    public string SenderEmail { get; set; } 
} 
相關問題