Jquery 仅当字段可见时才需要验证
我正在ASP.NET MVC 3中使用Jquery 仅当字段可见时才需要验证,jquery,asp.net-mvc-3,jquery-validate,requiredfieldvalidator,client-side-validation,Jquery,Asp.net Mvc 3,Jquery Validate,Requiredfieldvalidator,Client Side Validation,我正在ASP.NET MVC 3中使用[Required]属性进行客户端验证 该类看起来如下所示: public class User { [Required(ErrorMessage = "First Name is required")] public string FirstName { get; set; } } 我希望字段FirstName仅在可见时进行验证,该字段仅在特定条件下显示。我该怎么做 我已经使用了以下内容,但它看起来仍然要验证该隐藏字段的必填字段 $('
[Required]
属性进行客户端验证
该类看起来如下所示:
public class User
{
[Required(ErrorMessage = "First Name is required")]
public string FirstName { get; set; }
}
我希望字段FirstName
仅在可见时进行验证,该字段仅在特定条件下显示。我该怎么做
我已经使用了以下内容,但它看起来仍然要验证该隐藏字段的必填字段
$('#registerForm').validate({ ignore: ":not(:visible)" });
我将创建一个条件必需的属性。有一篇很好的文章介绍了如何使用jQuery验证创建一个 另一个选项:您可以引用提供此功能和客户端脚本的项目
此外,您还可以利用ajax加载部分视图,以便在隐藏时它们永远不会出现在页面上。这将完全避免条件验证。通过@Josiah的一些有用提示,我能够满足我的需求 添加RequirediftAttribute类和所需的javascript。提及 并在类中添加
RequiredIf
属性,如下所示:
public class User
{
[RequiredIf("hFirstName", "true", ErrorMessage = "First Name is required")]
public string FirstName { get; set; }
在aspx中:
@Html.TextBoxFor(model => Model.FirstName, new { @style = "height:auto;" })
@Html.ValidationMessageFor(model => Model.FirstName)
@Html.Hidden("hFirstName")
如果FirstName字段隐藏,则将hFirstName
的值设置为'true',如果可见,则将其设置为'false'
这些变化会产生魔力。感谢@Josiah Ruddell的尝试我的习惯:
它支持多种条件。有点晚了
namespace System.ComponentModel.DataAnnotations
{
public class RequiredIfVisibleAttribute : RequiredAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext context)
{
if (HttpContext.Current.Request.Form.AllKeys.Contains(context.MemberName))
return base.IsValid(value, context);
return ValidationResult.Success;
}
}
}
但这是我的解决方案
只是Required的一个继承,它将以相同的方式进行操作,只是只有当字段包含在发布的键中时,它才会激活。是否有任何自定义属性,如RequiredifyVisible?在万无一失中,有一些属性,比如RequiredIf,RequiredIfNot,…,我不能将它们用于我的需求。我不知道。但您可以在隐藏字段上使用requiredif。任何隐藏/显示内容的东西都会简单地更新隐藏字段。这东西太棒了!Simon Ince现在有一个Mvc.ValidationTookit Alpha版本在这里:!它应该是在GitHub repo中(在我看来):)我终于得到了“RequiredIf”来工作,但我不得不稍微修改一下代码。出于某种原因,它只有在扩展RequiredAttribute而不是ValidationAttribute时才起作用,另外需要指出的是,客户端的.addMethod需要位于jQuery.ready()函数之外。这是使用C#4.5,jQuery.validator 1.8.1I,我假设,如果仔细观察,您会发现在javascript中添加ignore指令会停止客户端验证。但是在文章中,服务器端验证开始了,并将返回一个包含验证消息的页面。您能解释一下如何在我的项目中包含这个(Javascript和C代码)吗?
namespace System.ComponentModel.DataAnnotations
{
public class RequiredIfVisibleAttribute : RequiredAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext context)
{
if (HttpContext.Current.Request.Form.AllKeys.Contains(context.MemberName))
return base.IsValid(value, context);
return ValidationResult.Success;
}
}
}