Asp.net mvc 3 需要对一个或另一个文本框进行MVC3验证
我正在寻找一种方法来检查表单中的两个文本框,以确保其中至少有一个已填充。只有当两个文本框都为空时,验证才会失败。有没有一种简单的方法可以使用不引人注目的JScript和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
谢谢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; }
}