Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.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
Jquery 仅当字段可见时才需要验证_Jquery_Asp.net Mvc 3_Jquery Validate_Requiredfieldvalidator_Client Side Validation - Fatal编程技术网

Jquery 仅当字段可见时才需要验证

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仅在可见时进行验证,该字段仅在特定条件下显示。我该怎么做 我已经使用了以下内容,但它看起来仍然要验证该隐藏字段的必填字段 $('

我正在ASP.NET MVC 3中使用
[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;
        }
    }
}