0

MVC プロジェクトでは、(たとえば) 10 個のプロパティを持つクラスがあり、すべて必須です。ユーザーが選択した場合、一度は 3 つのプロパティのみを検証し、それ以外の場合はすべてのプロパティを検証する必要があります。

それらはクラス患者の私のプロパティです:

    [Required(ErrorMessage = "Last Name is required")]
    [StringLength(50)]
    public string responsibleLastName;

    [Required(ErrorMessage = "First Name is required")]
    [StringLength(50)]
    public string responsibleFirstName;

    [Required(ErrorMessage = "Address is required")]
    [StringLength(50)]
    public string responsibleAddressLine1;

    [Required(ErrorMessage = "City is required")]
    [StringLength(50)]
    public string responsibleCityName;

    [Required(ErrorMessage = "State is required")]
    [StringLength(2)]
    public string responsibleStateCode;

    [Required(ErrorMessage = "Zip Code is required")]
    [StringLength(10)]
    public string responsiblePostalZoneOrZIPCode;

    [Required(ErrorMessage = "Birth Date is required")]
    public DateTime responsibleBirthDate;

    [Required(ErrorMessage = "Gender is required")]
    public string responsibleGenderCode;

    [Required(ErrorMessage = "Home Phone is required")]
    [StringLength(10)]
    public string responsibleHomePhone;

保存する前に、コントローラーで検証を行っています。

 if (firstCondition)  //partial validation
        {      if (!ModelState.IsValidField("responsibleLastName"))
            {
                ModelState.AddModelError("responsibleLastName", "Last Name is required");
            isOK = false;
             }
              //... and 2 more validation

              //finally I check the isOK value

               if (!isOK)
                  return PartialView("firstCondition", model);
               else
                  // do something

        }
else {   //validate all the properties from the model
    if (!ModelState.IsValid)
            return PartialView("secondCondition", model);   
    else
           //do something
}

最初のケースでは、メッセージはこれら 3 つのプロパティ + クラスのすべてのエラー メッセージに対して複製されます。

ModelState.IsValidField は Model.IsValid の呼び出しを行っており、各プロパティの ModelValidationResult のリストを取得しています。その後、必要なフィールドの結果を確認しますか? メッセージが重複するのはなぜですか?

モデルの検証機能を使いたいので、値を手動で検証したくない

//NOT
 if (!model.responsibleLastName == "")
            {
                ModelState.AddModelError("responsibleLastName", "Last Name is required");
            isOK = false;
             }

前もって感謝します。

4

1 に答える 1

1

このブログ投稿で指定されているカスタムRequiredIf検証属性を使用できます。

于 2012-08-23T10:16:48.240 に答える