Модель не проходит валидацию C# MVC ASP.NET CORE
Всем привет ребята. Модель не проходит валидацию.
Контроллер
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(CreateUserViewModel model, string password)
{
if (model.User != null)
{
var department = await _context.Departments.FindAsync(model.User.DepartmentId);
var position = await _context.Positions.FindAsync(model.User.PositionId);
if (department != null)
{
model.User.Department = department; // Заполнение ссылки на объект Department
}
if (position != null)
{
model.User.Position = position; // Заполнение ссылки на объект Position
}
if (ModelState.IsValid)
{
var result = await _userManager.CreateAsync(model.User, password);
if (result.Succeeded)
{
return RedirectToAction(nameof(Create)); // Перенаправляем на страницу создания пользователя
}
foreach (var error in result.Errors)
{
ModelState.AddModelError(string.Empty, error.Description);
}
}
}
// Логирование ошибок валидации
foreach (var state in ModelState)
{
foreach (var error in state.Value.Errors)
{
Console.WriteLine($"Property: {state.Key} Error: {error.ErrorMessage}");
}
}
// Обязательно загрузите списки Departments и Positions обратно в модель, если есть ошибки валидации
model.Departments = await _context.Departments.ToListAsync();
model.Positions = await _context.Positions.ToListAsync();
return View(model);
}
Модель
public class CreateUserViewModel
{
public User User { get; set; }
public IEnumerable<Department> Departments { get; set; }
public IEnumerable<Position> Positions { get; set; }
}
public class User : IdentityUser<int>
{
[Required]
public int DepartmentId { get; set; }
public Department Department { get; set; }
[Required]
public int PositionId { get; set; }
public Position Position { get; set; }
}
View
@using ManagerDoc.Models.ViewModel
@model CreateUserViewModel
<h2>Create User</h2>
<form asp-action="Create">
<div class="form-group">
<label asp-for="User.Email"></label>
<input asp-for="User.Email" class="form-control" />
<span asp-validation-for="User.Email" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="User.UserName"></label>
<input asp-for="User.UserName" class="form-control" />
<span asp-validation-for="User.UserName" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="User.DepartmentId">Department</label>
<select asp-for="User.DepartmentId" class="form-control" asp-items="@(new SelectList(Model.Departments, "Id", "Name"))">
<option value="">Select a Department</option>
</select>
@* <span asp-validation-for="User.DepartmentId" class="text-danger"></span> *@
</div>
<div class="form-group">
<label asp-for="User.PositionId">Position</label>
<select asp-for="User.PositionId" class="form-control" asp-items="@(new SelectList(Model.Positions, "Id", "Title"))">
<option value="">Select a Position</option>
</select>
@* <span asp-validation-for="User.PositionId" class="text-danger"></span> *@
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" id="password" name="password" class="form-control" />
<span class="text-danger"></span>
</div>
<button type="submit" class="btn btn-primary">Create</button>
</form>
<a asp-action="Index">Back to List</a>
Validate
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>
<script src="~/js/site.js"></script>
@await RenderSectionAsync("Scripts", required: false)