Сложная пользовательская проверка MVC 5 для нескольких свойств - PullRequest
0 голосов
/ 13 июня 2019

Я делаю некоторую пользовательскую проверку, она работает, когда выбрано выбранное значение в выпадающем списке и в зависимости от значения предполагается, что будут выбраны другие свойства.Мне было интересно, могу ли я создавать собственные сообщения для элементов управления в зависимости от того, какое значение выпадающего списка выбрано.В настоящее время у меня это работает часть пути, но у меня может быть сообщение только для одного контроллера.Я хотел бы знать, если каждый уровень я иду в своем утверждении IF, если я мог бы получить сообщение об ошибке соответственно.Вот мой код, который я хотел бы услышать и увидеть все, что рекомендуется, и что я должен делать или должен делать лучше.Спасибо.

     //part of model         [Required]
        [CheckDropDown]
        public string Usage { get; set; }

        /* INT OR STRING ?? */
        /* If USAGE selection no imm reqs pass else REQPROJ required */

        [Display(Name = "Required Project(s)")]
        public string RequiredProject { get; set; }

           // [Required]
            [Range(0, Int32.MaxValue)]
            //[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:#}")]
            public int Quantity { get; set; }

            //if quantity picked than units required
           // [Required]
            public string Units { get; set; }

    public class CustomValidation
        {
            public sealed class CheckDropDown : ValidationAttribute
            {
                public string DropDownValue { get; set; }

                protected override ValidationResult IsValid(object value, ValidationContext validationContext)
                {
                    //return base.IsValid(value, validationContext);

                    //var model = (CustomVaildModel)validationContext.ObjectInstance;
                    var model = (PartNumberViewModel)validationContext.ObjectInstance;

                    //if(model.Usage == "1" && model.RequiredProject != null)
                    if(model.Usage == "1")
                    {
                        if(model.RequiredProject != null)
                        {
                            var errorMsg = "If there are 'No Immediate Requirements' for this part number, then a 'Required Project' is not necessary.";
                            return new ValidationResult(errorMsg);
                        }
                        else
                        {
                            return ValidationResult.Success;
                        }                    
                    }
                    else if(model.Usage == "2" && model.Quantity.Equals(0) && model.Units == null)
                    {
                        //FormatErrorMessage(validationContext.DisplayName);
                        var errorMsg = "When Usage = 'Procure for Projects listed' Quantity and Units CANNOT BE EMPTY!";
                        return new ValidationResult(errorMsg);                   
                    }
                    else
                    {
                        return ValidationResult.Success;
                    }
                }
            }//view part <div class="form-group row">
<div class="col-md-4 col-lg-4">
@Html.LabelFor(x => x.Usage,
htmlAttributes: new { @class = "control-label" })
</div>
<div class="col-md-8 col-lg-8">
@Html.DropDownListFor(x => x.Usage,
(IEnumerable<SelectListItem>) ViewBag.UsageDDL,
"", new { @class = "form-control" })
@Html.ValidationMessageFor(x => x.Usage, "",
new { @class = "text-danger" })
</div>
</div>

<div class="form-group row">
<div class="col-md-4 col-lg-4">
@Html.LabelFor(x => x.RequiredProject,
htmlAttributes: new { @class = "control-label" })
</div>
<div class="col-md-8 col-lg-8">
@Html.EditorFor(x => x.RequiredProject, new { htmlAttributes =
new { @class = "form-control" }})
@Html.ValidationMessageFor(x => x.RequiredProject, "",
new { @class = "text-danger" })
</div>
</div>

@* Think about Textboxes on SAME line or SEPERATE *@
<div class="form-group row">
<div class="col-md-4 col-lg-4">
@Html.LabelFor(x => x.Quantity,
htmlAttributes: new { @class = "control-label" })
</div>
<div class="col-md-8 col-lg-8">
@Html.EditorFor(x => x.Quantity, new { htmlAttributes =
new { @class = "form-control", @type = "number" }})
@Html.ValidationMessageFor(x => x.Quantity, "",
new { @class = "text-danger" })
</div>
</div>

<div class="form-group row">
<div class="col-md-4 col-lg-4">
@Html.LabelFor(x => x.Units,
htmlAttributes: new { @class = "control-label" })
</div>
<div class="col-md-8 col-lg-8">
@Html.DropDownListFor(x => x.Units,
(IEnumerable<SelectListItem>) ViewBag.UnitsDDL,
"", new { @class="form-control" })
@Html.ValidationMessageFor(x => x.Units, "",
new { @class = "text-danger" })
</div>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...