1

フォームを検証する必要があります。これが私のモデルです:

 public class Movie {
    public int ID { get; set; }

    [Required]
    public string Title { get; set; }

    [DataType(DataType.Date)]
    public DateTime ReleaseDate { get; set; }

    [Required]
    public string Genre { get; set; }

    [Range(1, 100)]
    [DataType(DataType.Currency)]
    public decimal Price { get; set; }

    [StringLength(5)]
    public string Rating { get; set; }
}

私の質問は: CinemaId を含む querystringParam があります。このパラメーターを読み取るときに、データベースから読み取った各プロパティの構成が必要かどうか。プロパティに追加[Required]する必要がある場合もあれば、いいえ、どうすればいいですか??

4

2 に答える 2

0

@JotaBe が提供した回答に基づいて、Model プロパティ自体でカスタム検証属性を使用できます。このようなもの :

条件付き必須属性

public class ConditionalRequiredAttribute : ValidationAttribute
{
    private const string DefaultErrorMessageFormatString 
                   = "The {0} field is required.";

    private readonly string _dependentPropertyName;

    public ConditionalRequiredAttribute(string dependentPropertyName)
    {
        _dependentPropertyName = dependentPropertyName;
        ErrorMessage = DefaultErrorMessageFormatString;
    }

    protected override ValidationResult IsValid(
                object item, 
                ValidationContext validationContext)
    {
        var property = validationContext
                         .ObjectInstance.GetType()
                         .GetProperty(_dependentPropertyName);

        var dependentPropertyValue = 
                            property
                            .GetValue(validationContext.ObjectInstance, null);

        int value;
        if (dependentPropertyValue is bool 
                           && (bool)dependentPropertyValue)
        {
            /* Put the validations that you need here */
            if (item == null)
            {
              return new ValidationResult(
                  string.Format(ErrorMessageString, 
                                validationContext.DisplayName));
            }
        }

         return ValidationResult.Success;
    }
}

属性の適用

ここにクラス Movie があり、サーバーから設定できる RatingIsRequired ブール値プロパティの値に応じて評価が必要です。

public class Movie
{
   public bool RatingIsRequired { get; set; }

   [ConditionallyRequired("RatingIsRequired"]   
   public string Rating { get; set; }
}
  1. これにより、true に設定されて いて空のModelState.IsValid場合、false が返されます。RatingIsRequiredRating
  2. [Required]また、通常の属性のように機能するように、クライアント対応の検証用に目立たないカスタム jquery バリデーターを作成することもできます。

これが役立つかどうか教えてください。

于 2013-07-17T15:11:56.010 に答える