ASP. NET ядро ​​MVC настраиваемые даты сравнения проверок - PullRequest
0 голосов
/ 13 июля 2020

У меня есть две даты в моем представлении бритвы, и мне нужно проверить это, и с помощью аннотации данных отобразить ошибку, если До даты меньше даты. когда я запускаю код в режиме отладки, возникает точка останова, но ошибка не отображается на странице. он снова отображает форму таким же образом, если состояние модели недействительно. Ниже мой код, я делаю что-то не так.

public class AcctViewModel: IValidatableObject
{

 [Key] public long AccountId { get; set;}

  [Display(Name = "Account Name"), DataType(DataType.Text), StringLength(15), Required]
  public string AcctName {get;set;}
   
   [Display(Name = "From Date"), DataType(DataType.Date), Required]
   public DateTime FromDate { get; set; }

   [Display(Name = "To Date"), DataType(DataType.Date), Required]
   public DateTime ToDate { get; set; }


   public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        {
            List<ValidationResult> errors = new List<ValidationResult>();
            if (ToDate < FromDate)
            {
                errors.Add(new ValidationResult($"{nameof(ToDate)} needs to be greater than From date.", new List<string> { nameof(ToDate) }));
            }
            return errors;
        }

}

 <div class="form-row">
                        <div class="col-md-12">
                            <div class="form-group form-group--float">
                                <input class="form-control date-picker" asp-for="ToDate">
                                <label asp-for="ToDate"></label>
                              
                                <div class="invalid-tooltip"><span asp-validation-for="ToDate"></span></div>
                                <i class="form-group__bar"></i>
                            </div>
                        </div>
                    </div>

                </div>

1 Ответ

0 голосов
/ 13 июля 2020

Контроллер:

 public IActionResult Index()
        {
            return View();
        }
        [HttpPost]
        public IActionResult Index(AcctViewModel model)
        {
            if (ModelState.IsValid)
            {

            }
            return View(model);
        }

Вид:

   <form asp-action="Index">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="AccountId" class="control-label"></label>
                <input asp-for="AccountId" class="form-control" />
                <span asp-validation-for="AccountId" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="AcctName" class="control-label"></label>
                <input asp-for="AcctName" class="form-control" />
                <span asp-validation-for="AcctName" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="FromDate" class="control-label"></label>
                <input asp-for="FromDate" class="form-control" />
                <span asp-validation-for="FromDate" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="ToDate" class="control-label"></label>
                <input asp-for="ToDate" class="form-control" />
                <span asp-validation-for="ToDate" class="text-danger"></span>
            </div>
            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-primary" />
            </div>
        </form>

модель:

   public class AcctViewModel : IValidatableObject
    {
        [Key] 
        public long AccountId { get; set; }

        [Display(Name = "Account Name"), DataType(DataType.Text), StringLength(15), Required]
        public string AcctName { get; set; }

        [Display(Name = "From Date"), DataType(DataType.Date), Required]
        public DateTime FromDate { get; set; }

        [Display(Name = "To Date"), DataType(DataType.Date), Required]
        public DateTime ToDate { get; set; }

        public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        {
            List<ValidationResult> errors = new List<ValidationResult>();
            if (ToDate < FromDate)
            {
                errors.Add(new ValidationResult($"{nameof(ToDate)} needs to be greater than From date.", new List<string> { nameof(ToDate) }));
            }
            return errors;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...