MVC3验证的文本框一个或另一个需要
我正在寻找一种方法来检查两个文本框的形式,以确保其中至少有一个被填充。只有当两个文本框都为空时,验证才会失败。有没有简单的方法来使用Unobtrusive JScript和MVC3表单验证来做到这一点? 感谢MVC3验证的文本框一个或另一个需要
您可以实现这样的事情answer by Darin Dimitrov。
它说明了如何使自己的自定义验证(客户端和服务器端上)。它将使用MVC3验证和JQuery不显眼的验证。您可以检查是否满足条件(选中一个或多个复选框)并基于该条件进行验证。
的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.
}
})
这样你可以看一下条件验证解释下面提到的文章
http://blogs.msdn.com/b/simonince/archive/2010/06/04/conditional-validation-in-mvc.aspx
你可以把[RequiredIf]属性在两个文本框中检查textBox1是否为空,则需要textbox2,反之亦然。
我添加了类,但它似乎不起作用。我想,以检查是否文本框为空的属性应该simalr这样: [RequiredIf(“姓氏”,“”,的ErrorMessage =“姓氏或名字必须包含一个值”)] 但补充说,这两个姓氏和名字(当然带有逆标签)不会做任何事情 – jiggawagga
你必须缺少一些东西..下载文章底部给出的代码并理解它是如何工作的,然后你可能会弄清楚你是什么在应用程序中丢失。 – pramodtech
这就是我做到的。我不知道为什么它不起作用,但我最终使用了semaz的类似解决方案,但与我的问题完全相关。谢谢你。 – jiggawagga
试试这个。它有所有的信息。希望它能帮助:
http://derans.blogspot.com/2011/05/contact-form-revisited-with-aspnet-mvc.html
这里是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; }
}
这很好,谢谢! – jiggawagga