24

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

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

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

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

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

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

4 に答える 4

14

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

RequiredIfAttributeクラスと必要なjavascriptを追加します。ASP.NETMVC3の条件付き検証を参照してください

そして、クラスに次のように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」に設定します。

魔法はこれらの変更で機能します。@JosiahRuddellの回答に感謝します

于 2011-04-21T13:07:27.727 に答える
7

条件付きで必要な属性を作成します。jQuery検証を使用して作成するための優れた記事がここにあります

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

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

于 2011-04-20T14:27:23.770 に答える
1

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

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

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

于 2013-11-16T13:55:32.893 に答える
0

少し遅れた、

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

于 2018-05-15T22:02:42.097 に答える