MVC3验证的文本框一个或另一个需要

问题描述:

我正在寻找一种方法来检查两个文本框的形式,以确保其中至少有一个被填充。只有当两个文本框都为空时,验证才会失败。有没有简单的方法来使用Unobtrusive JScript和MVC3表单验证来做到这一点? 感谢MVC3验证的文本框一个或另一个需要

您可以实现这样的事情answer by Darin Dimitrov

它说明了如何使自己的自定义验证(客户端和服务器端上)。它将使用MVC3验证和JQuery不显眼的验证。您可以检查是否满足条件(选中一个或多个复选框)并基于该条件进行验证。

+0

这很好,谢谢! – jiggawagga

的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

是的,这是关键。现在好了。 –

这样你可以看一下条件验证解释下面提到的文章

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

试试这个。它有所有的信息。希望它能帮助:

http://derans.blogspot.com/2011/05/contact-form-revisited-with-aspnet-mvc.html

尝试nuget包装万无一失验证。它包括[Requiredif]和[Requiredifnot] http://foolproof.codeplex.com/

这里是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; } 
}