В настоящее время у меня есть представление с некоторыми выпадающими списками и другими элементами управления.У меня сейчас почти все работает правильно, когда выбран определенный вариант, тогда требуются другие элементы управления.У меня есть только настройка с этим 1 условием в данный момент.
Я хотел бы спросить совета, должен ли я установить bool для каждого свойства элемента управления, и если его true разрешить его передачу, в противном случае установите его в false.
Я также хотел спросить, как сделатьЯ установил сообщение для каждого свойства, которое я проверяю?У меня есть 2 текстовых поля и 1 другой DDL, которые нуждаются в значении, если выбрано определенное значение в этом другом ddl.Вот что у меня сейчас есть.
Что бы вы сделали?Если использование = 2, тогда требуемые проекты, количество и единицы не могут быть нулевыми, и как я могу получить сообщение для каждого высказывания, если оно ложно?
Модель:
//[CheckDropDown(ErrorMessage = "When Usage = '2' Quantity and Units CAN'T be NULL!")]
[Required]
[CheckDropDown]
public int 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 int? Units { get; set; }
Просмотр:
<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>
Пользовательский метод проверки:
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
//return base.IsValid(value, validationContext);
//var model = (CustomVaildModel)validationContext.ObjectInstance;
var model = (PartNumberViewModel)validationContext.ObjectInstance;
// Allow value 1 to have choices as well
//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.RequiredProject == null && 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;
}
}
}