2

私のコードの最初のモデルには、次のものがあります。

public class Agreement
{
    [Key]
    [ForeignKey("AppRegistration")]
    public int AppRegistrationId { get; set; }
    [Required]
    [Display(Name = "I agree to Participation Agreement")]
    [NotMapped]
    public bool IsAgreementChecked { get; set; }
    public DateTime DateAgreed { get; set; }
    public AppRegistration AppRegistration { get; set; }
}

ユーザーが [同意する] チェックボックスをクリックしたときにのみ保存した​​いので、マークを付けIsAgreementCheckedました。このモデルに基づいてを生成し、[作成] ページを使用しようとすると。すべてのフィールドが適切に検証されますが、チェックボックスは無視されます。つまり、チェックボックスは、いかなる種類の検証もトリガーしません。何か案は?ありがとう。NotMappedDateTimeController

4

2 に答える 2

3

それはあなたが何をしたいかによって異なります:

  • 値が指定されているかどうか (true または false) を確認する場合:

ブール値を Nullable にする:

[Required]
[Display(Name = "I agree to Participation Agreement")]
[NotMapped]
public bool? IsAgreementChecked { get; set; }
  • チェックボックスがチェックされているかどうかを検証したい場合(それがあなたが望むものだと私には思えます)最も簡単な方法は、明示的なチェックを行うことです(ただし、それはサーバー側とクライアント側を意味します)。このスレッドをチェックすることもできます: How to handle Booleans/CheckBoxes in ASP.NET MVC 2 with DataAnnotations?

提案されたソリューションは、まさにあなたが望むことを行います。基本的に、新しい DataAnnotation を作成します。既存のものでは、これは不可能です。

現時点では、required-attribute は値が指定されているかどうかを確認するだけです。ブール値は true または false であるため、検証が失敗することはありません。

于 2013-05-08T17:32:59.587 に答える
1

これを行う方法を説明するブログ投稿は次のとおりです。

http://blog.degree.no/2012/03/validation-of-required-checkbox-in-asp-net-mvc/

以下のコードはこの投稿からのものです

基本的に、カスタムを作成できますValidationAttribute

public class BooleanRequiredAttribute : ValidationAttribute, IClientValidatable
{
    public override bool IsValid(object value)
    {
        if (value is bool)
            return (bool)value;
        else
            return true;
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(
        ModelMetadata metadata,
        ControllerContext context)
    {
        yield return new ModelClientValidationRule
                            {
                                ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()),
                                ValidationType = "booleanrequired"
                            };
    }
}

[Required]次に、属性の代わりにモデルに適用します。

[BooleanRequired(ErrorMessage = "You must accept the terms and conditions.")]
于 2013-05-08T17:33:01.863 に答える