У меня есть следующая модель:
public partial class EmployeeInfo
{
public int EmployeeInfoId { get; set; }
[Required]
[DisplayName("Last Name")]
public string LastName { get; set; } =null!;
public virtual ICollection<EmergencyInfo> EmergencyInfos { get; } = new List<EmergencyInfo>();
}
У меня есть еще один класс модели для EmergencyInfo
public partial class EmergencyInfo
{
public int EmergencyInfoId { get; set; }
public int EmployeeInfoId { get; set; }
[DisplayName("First Name")]
[Required]
public string? FirstName { get; set; } = null!;
public virtual EmployeeInfo? EmployeeInfo { get; set; }
}
Хотя имя требуется в модели EmergencyInfo. Когда я нажимаю кнопку отправки, не отображается, что требуется имя. Это показывает, что LastName является обязательным, поскольку это поле существует в модели EmployeeInfo. ниже моя страница бритвы:
@model AckPackage.Models.EmployeeInfo
@{
ViewData["Title"] = "Create";
}
<div class = "form-group row">
<div class = "col-sm-4">
<label asp-for = "LastName" class = "control-label"></label>
<input asp-for = "LastName" class = "form-control input-lg" />
<span asp-validation-for = "LastName" class = "text-danger"></span>
</div>
<div class = "col">
<label asp-for = "@Model.EmergencyInfos.ToList()[i].FirstName" class = "control-label"></label>
<input name = "EmergencyInfos[@i].FirstName" value = "@(string.IsNullOrEmpty(Model.EmergencyInfos.ToList()[0].FirstName)? "": @Model.EmergencyInfos.ToList()[0].FirstName)" class = "form-control" />
<span asp-validation-for = "@Model.EmergencyInfos.ToList()[0].FirstName" class = "text-danger"></span>
</div>
@section Scripts {
@{
await Html.RenderPartialAsync("_ValidationScriptsPartial");
}
Незаполненная фамилия всегда показывает, что требуется фамилия, но имя из EmergencyInfo всегда переходит в HTTPPost без отображения сообщения об ошибке проверки.
Если я удалю tolist(), как предложено в комментарии ниже, я получу эту ошибку компиляции:
Да, я. Я не хотел публиковать всю страницу Razor. Я просто хотел показать проблему, которая у меня возникла
Удалите ToList, я никогда не видел ничего подобного. Просто исправьте свою модель и используйте Model.EmergencyInfos[i].FirstName
Я удалил toList() и вставил ошибку в свой исходный пост.
Убедитесь, что asp-for тег помощник для input, как показано ниже:
<div class = "col">
<label asp-for = "@Model.EmergencyInfos.ToList()[0].FirstName" class = "control-label"></label>
<input asp-for = "EmergencyInfos.ToList()[@i].FirstName" name = "EmergencyInfos[@i].FirstName"value = "@(string.IsNullOrEmpty(Model.EmergencyInfos.ToList()[0].FirstName)? "": @Model.EmergencyInfos.ToList()[0].FirstName)" class = "form-control" />
<span asp-validation-for = "@Model.EmergencyInfos.ToList()[0].FirstName" class = "text-danger"></span>
</div>
Похоже, что вы обращаетесь только к первому элементу в списке EmergencyInfos на странице Razor, но вам следует проверять все элементы в списке на предмет проверки.