ASP.NET MVC3のクライアント側の検証に[Required]
属性を使用しています。
クラスは次のようになります。
public class User
{
[Required(ErrorMessage = "First Name is required")]
public string FirstName { get; set; }
}
フィールドFirstName
が表示されている場合にのみ検証されるようにしたいのですが、これは特定の条件でのみ表示されます。どうやってやるの?
私は以下を使用しましたが、それでもその非表示フィールドの必須フィールドを検証するように見えます。
$('#registerForm').validate({ ignore: ":not(:visible)" });
@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
条件付きで必要な属性を作成します。 jQuery検証を使用して作成することに関する良い記事があります ここ 。
別のオプション:この機能とクライアントスクリプトを提供する Foolproofvalidation(codeplex) のようなプロジェクトを参照できます。
さらに、ajaxを利用して部分ビューをロードし、非表示のときにページに表示されないようにすることもできます。これにより、条件付き検証が完全に回避されます。
私のカスタムを試してください 検証属性 :
[ConditionalRequired("hFirstName==true")]
public string FirstName {get, set};
複数の条件をサポートします。
少し遅れた、
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の継承です。