Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 需要对一个或另一个文本框进行MVC3验证_Asp.net Mvc 3_Validation_Textbox - Fatal编程技术网

Asp.net mvc 3 需要对一个或另一个文本框进行MVC3验证

Asp.net mvc 3 需要对一个或另一个文本框进行MVC3验证,asp.net-mvc-3,validation,textbox,Asp.net Mvc 3,Validation,Textbox,我正在寻找一种方法来检查表单中的两个文本框,以确保其中至少有一个已填充。只有当两个文本框都为空时,验证才会失败。有没有一种简单的方法可以使用不引人注目的JScript和MVC3表单验证来实现这一点? 谢谢Javascript,您可以使用Jquery实现这一点 $(document).ready(function(){ var inp = $("#txt").val(); var inp2 = $("#txt2").val(); if(jQuery.trim(inp).len

我正在寻找一种方法来检查表单中的两个文本框,以确保其中至少有一个已填充。只有当两个文本框都为空时,验证才会失败。有没有一种简单的方法可以使用不引人注目的JScript和MVC3表单验证来实现这一点?
谢谢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.
   }
})
$(文档).ready(函数(){
var inp=$(“#txt”).val();
var inp2=$(“#txt2”).val();
if(jQuery.trim(inp).length<0&&jQuery.trim(inp2.length<0)
{
//显示您的消息。
}
})

您可以查看下面提到的文章中解释的条件验证


您可以在两个文本框上都添加[RequiredIf]属性,然后检查textBox1是否为空,textbox2是否为空,反之亦然。

尝试此操作。它有所有的信息。希望有帮助:


您可以实现类似的功能


它解释了如何创建自己的自定义验证器(在客户端和服务器端)。它将使用MVC3验证和JQuery非干扰性验证。您可以检查条件是否满足(选中一个或多个复选框)并基于此进行验证。

尝试nuget package万无一失的验证。它包括[Requiredif]和[Requiredifnot]

这是我的版本的至少需要验证程序,支持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)));
    }
}

这有点不完整。要么是一个,要么是另一个。我编辑了我的答案,他提到如果两个文本框都是空的,那么验证应该失败,对吗?我添加了类,但它似乎不起作用。我想检查文本框是否为空,属性应该与此类似:[RequiredIf(“LastName”,“”,ErrorMessage=“LastName或firstname必须包含一个值”)],但将其添加到LastName和firstname中(当然带有反向标记)不做任何事情你一定错过了什么。下载文章底部给出的代码,了解它是如何工作的,然后你可能会发现你在应用程序中遗漏了什么。我就是这样做的。我不知道为什么它不起作用,但我最终使用了semaz的解决方案,该解决方案与我的问题类似,但与我的问题完全相关。谢谢你。
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; }
}