В одном из моих действий контроллера первое, что я делаю, - это передаю модель новому действию, которое, по сути, просто анализирует входные данные, чтобы определить, ввел ли пользователь правильную дату. Затем возвращается модель и проверяется ModelState.IsValid.
public Import ValidateUploadModel(Import Model)
{
// DO not allow future dates
if (Model.CurrMoInfo.CurrMo > DateTime.Now)
{
ModelState.AddModelError("FutureDate", "You cannot assign a future date.");
}
//Do not allow dates from the same month (we run the processing a month behind)
if (Model.CurrMoInfo.CurrMo.Month == DateTime.Now.Month)
{
ModelState.AddModelError("SameMonth", "You must process a previous month.");
}
//Ensure day is last day of a previous month
if (Model.CurrMoInfo.CurrMo.Day != DateTime.DaysInMonth(Model.CurrMoInfo.CurrMo.Year, Model.CurrMoInfo.CurrMo.Month))
{
ModelState.AddModelError("LastDay", "You must enter the last day of the month.");
}
//Do not allow dates older than 12 months back
if (Model.CurrMoInfo.CurrMo < DateTime.Now.AddMonths(-12))
{
ModelState.AddModelError("TooOld", "Date must not be older than a year.");
}
return Model;
}
В тот момент, когда я знаю, что у меня есть ошибки состояния модели, я могу корректно показать их в моем виде бритвы, поставив следующее
<span class="text-danger">@Html.ValidationSummary(false)</span>
Итак, поскольку все мои ошибки состояния модели относятся к одному и тому же вводу на странице, я могу смело делать это Но что, если у меня есть различные входы с различными ошибками, которые мне нужно отображать независимо друг от друга? Как бы я поступил так? Кроме того, есть ли лучший (или более подходящий) способ сделать это помимо использования @ Html.ValidationSummary?
Я просмотрел документы Microsoft и несколько десятков вопросов StackOverflow, чтобы попытаться перевести более старые ответы в .Net Core, чтобы делать дела без удачи.
Изменить для ясности:
Вот вся карта в виде бритвы:
<div class="card-body">
@if (Model.StagingCount == 0)
{
<input asp-for="@Model.CurrMoInfo.CurrMo" type="date" required class="col-lg-12" />
}
else
{
<input asp-for="@Model.CurrMoInfo.CurrMo" type="date" disabled="disabled" required class="col-lg-12" />
}
<span class="text-danger">@Html.ValidationSummary(false)</span>
</div>
Входные данные для свойства модели, однако они не аннотированы. Я написал свои собственные правила и вручную добавляю ошибки в состояние модели, если правила не соблюдаются. У меня работает код, однако он не масштабируется, когда мне нужно проверить больше полей. Я просто хочу знать, как лучше это сделать.