Я искал этот вопрос в нескольких местах и не смог найти именно то, что ищу.Допустим, у меня есть структура модели MVC:
public class Person {
[Required]
public string Name { get; set; }
public int Age { get; set; }
}
public class Workers {
[AgeRequired]
public Person Pilots { get; set; }
public Person Chefs { get; set; }
}
, и вот мой код cshtml:
@Model Workers
<div>
<label asp-for="Pilots.Name"></label>
<input asp-for="Pilots.Name"></input>
<span asp-validation-for="Pilots.Name"></span>
</div>
<div>
<label asp-for="Pilots.Age"></label>
<input asp-for="Pilots.Age"></input>
<span asp-validation-for="Pilots.Age"></span>
</div>
<div>
<label asp-for="Chefs.Name"></label>
<input asp-for="Chefs.Name"></input>
<span asp-validation-for="Chefs.Name"></span>
</div>
<div>
<label asp-for="Chefs.Age"></label>
<input asp-for="Chefs.Age"></input>
<span asp-validation-for="Chefs.Age"></span>
</div>
Person - это общий класс Model, содержащий информацию о пилотах или шеф-поварах.Я хочу, чтобы в моем пользовательском атрибуте проверки AgeRequired возраст был обязательным только для пилотов, а не для поваров.Возможно ли это?
Я работаю на бэкэнд-стороне после отправки формы, однако мне бы хотелось, чтобы это было и на переднем конце.Вот мой код для моего атрибута:
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
public class AgeRequiredAttribute: ValidationAttribute, IClientModelValidator
{
public override bool IsValid(object value)
{
Workers workers = value as Workers;
return workers.Age > 0;
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ClientModelValidationContext context)
{
yield return new ModelClientValidationRule("agerequired", "{0} is a required field.");
}
}
}
, а вот мой код JavaScript для проверки внешнего интерфейса:
/// <reference path="jquery.validate.js" />
/// <reference path="jquery.validate.unobtrusive.js" />
$.validator.addMethod("agerequired",
function (value, element, parameters) {
return value > 0;
});
$.validator.unobtrusive.adapters.add("agerequired", [], function (options) {
options.rules.agerequired= {};
options.messages["agerequired"] = options.message;
});
ClientValidationEnabled и UnobstrusiveJavaScriptEnabled оба установлены в true.
Этот пользовательский атрибут будет работать, когда он у меня есть на самом поле Age, но это делает его обязательным как для пилотов, так и для поваров.Я хочу, чтобы это требовалось только для пилотов.
Заранее благодарю за помощь!