web-dev-qa-db-ja.com

フィールドが表示されている場合にのみ検証が必要

ASP.NET MVC3のクライアント側の検証に[Required]属性を使用しています。

クラスは次のようになります。

public class User
{
    [Required(ErrorMessage = "First Name is required")]
    public string FirstName { get; set; }
}

フィールドFirstNameが表示されている場合にのみ検証されるようにしたいのですが、これは特定の条件でのみ表示されます。どうやってやるの?

私は以下を使用しましたが、それでもその非表示フィールドの必須フィールドを検証するように見えます。

$('#registerForm').validate({ ignore: ":not(:visible)" });
23
Prasad

@Josiahからのいくつかの有用なヒントで、私は自分の要件に到達することができます。

RequiredIfAttributeクラスと必要なJavaScriptを追加します。参照 ASP.NET MVC 3での条件付き検証

そして、クラスに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に感謝します answer

14
Prasad

条件付きで必要な属性を作成します。 jQuery検証を使用して作成することに関する良い記事があります ここ

別のオプション:この機能とクライアントスクリプトを提供する Foolproofvalidation(codeplex) のようなプロジェクトを参照できます。

さらに、ajaxを利用して部分ビューをロードし、非表示のときにページに表示されないようにすることもできます。これにより、条件付き検証が完全に回避されます。

7
Josiah Ruddell

私のカスタムを試してください 検証属性

[ConditionalRequired("hFirstName==true")]
public string FirstName {get, set};

複数の条件をサポートします。

1
karaxuna

少し遅れた、

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の継承です。

0
Bru