4

FluentValidationを使用してMVCフォームの入力を検証しています。

チェックボックスがあります。

検証ルールを何に設定しても、チェックボックスは検証されません。

同じページで正常に検証するドロップダウンリストがあるため、検証が機能していることはわかっています。

意見

<%: Html.CheckBoxFor(m => m.fullname_required) %>

モデル

[Validator(typeof(CreateFormModelValidator))]
public class CreateFormModel
{
    public int? group_id { get; set; }

    public IEnumerable<SelectListItem> Groups { get; set; }

    [DisplayName("Fullname is required")]
    public bool fullname_required { get; set; }
}
public class CreateFormModelValidator : AbstractValidator<CreateFormModel>
{
    public CreateFormModelValidator()
    {
        RuleFor(x => x.group_id).NotEmpty().NotNull().WithMessage("Please select a group!");
        RuleFor(x => x.fullname_required).NotNull();        
    }
}

私はもう試した

RuleFor(x => x.fullname_required).NotEmpty();
RuleFor(x => x.fullname_required).NotNull();
RuleFor(x => x.fullname_required).NotEqual(false); 

どれも機能しません。私はこの仕事をしようとしてバナナに行きます。これはF***ingチェックボックスです

PS:代わりにjQueryの使用について話しているスレッドを見つけましたが、これはクライアント側ではなくサーバー側の検証を使用しています。

4

3 に答える 3

4

チェックボックスのページにValidationMessageFor属性を配置したことはありません。正常に検証されていましたが、表示されませんでした。

更新:最終的な目標は、2番目のチェックボックスがチェックされている場合にのみ検証される1つのチェックボックスを持つことでした。つまり

RuleFor(x => x.fullname_show).NotEmpty().When(x => x.fullname_required == true);

ただし、これは上記のfacepalmの後でも機能しませんが、lomaxxのおかげで、fullname_requiredをboolに変換することで機能させることができましたか?

RuleFor(x => x.fullname_show).NotEmpty().When(x => ((bool?)x.fullname_required) != false);

誰かがMVCのFluentValidationを使用してチェックボックスを条件付きで検証しようとしている場合は、それがあなたのやり方です!

于 2011-11-11T09:49:09.357 に答える
3

私には理論があり、間違っている可能性がありますが、boolは値型であり、参照型ではないため、定義上、常に値(つまり、trueまたはfalse)があります。

したがって、フォームを送信すると、「チェックされていない」の値がfalseであることがわかり、それが有効な値であると見なされます。

あなたがする必要があるかもしれないことは、デフォルト値がfalseではなく "null"になるように、コードでboolをnull可能に変更することです。

于 2011-11-10T18:34:10.230 に答える
2

Fluent検証を使用してチェックボックスを検証するには、検証中にフィールドの値をチェックすることを使用できます。私はそれをテストしました、そしてそれは何の欠陥もなくうまく働いています。

 RuleFor(x => x.fullname_required).Must(x => x.Equals(true)).WithMessage("Full Name is Required");
于 2018-04-17T07:20:33.380 に答える