Моя проверка формы не работает, и когда я вывожу ошибки ModelState, я вижу это :
Ключ: адрес электронной почты, ошибка: поле «адрес электронной почты» является обязательным.
Ключ: пароль, ошибка: поле «пароль» является обязательным.
Эти ошибки не отображаются ни в одной из форм на моей странице.
Во время написания этого сообщения я код не менялся, но по какой-то причине
Ключ: Пароль, Ошибка: Поле «Пароль» является обязательным.
сейчас больше не отображается, что меня еще больше смущает.
В моем представлении редактирования есть все необходимые поля, и что бы я ни делал, я' Я не могу избавиться от ошибок.
Чтобы упростить визуализацию, моя страница выглядит так:
EditPageView
Ниже приведен весь соответствующий код:
Код: Выделить всё
@model Replay.ViewModels.ApplicationUserRoleViewModel
@{
ViewData["Title"] = "Edit User";
}
Edit User
@for (int i = 0; i < Model.Roles.Count; i++)
{
@Html.HiddenFor(m => m.Roles[i].Id)
@Html.HiddenFor(m => m.Roles[i].Name)
@Html.DisplayFor(m => m.Roles[i].Name)
@Html.CheckBoxFor(m => m.Roles[i].Selected)
}
Save
Код: Выделить всё
using Replay.Models;
namespace Replay.ViewModels
{
public class ApplicationUserRoleViewModel
{
public ApplicationUser ApplicationUser { get; set; }
public List Roles { get; set; }
public ApplicationUserRoleViewModel()
{
}
public ApplicationUserRoleViewModel(ApplicationUser applicationUser, List roles, List userRoleIds)
{
ApplicationUser = applicationUser;
Roles = roles.Select(r => new RoleViewModel
{
Id = r.Id,
Name = r.Name,
Selected = userRoleIds.Contains(r.Id)
}).ToList();
}
}
public class RoleViewModel
{
public int Id { get; set; }
public string Name { get; set; }
public bool Selected { get; set; }
}
}
Код: Выделить всё
using System.ComponentModel.DataAnnotations;
namespace Replay.Models;
public class ApplicationUser
{
[Key]
public int Id { get; set; }
public string Email { get; set; }
public string FullName { get; set; }
public string Password { get; set; }
public Boolean Active { get; set; }
}
Код: Выделить всё
using System.ComponentModel.DataAnnotations;
namespace Replay.Models
{
public class Role
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
}
}
Код: Выделить всё
[HttpPost]
[ValidateAntiForgeryToken]
public async Task Edit(ApplicationUserRoleViewModel viewModel)
{
if (!ModelState.IsValid)
{
foreach (var key in ModelState.Keys)
{
var state = ModelState[key];
foreach (var error in state.Errors)
{
System.Diagnostics.Debug.WriteLine($"Key: {key}, Error: {error.ErrorMessage}");
}
var roles = _dbContext.Role.ToList();
var userRoleIds = _dbContext.UserRoles
.Where(ur => ur.UserId == viewModel.ApplicationUser.Id)
.Select(ur => ur.RoleId).ToList();
viewModel.Roles = roles.Select(r => new RoleViewModel
{
Id = r.Id,
Name = r.Name,
Selected = userRoleIds.Contains(r.Id)
}).ToList();
return View(viewModel);
}
}
var user = _dbContext.ApplicationUser.Find(viewModel.ApplicationUser.Id);
if (user == null)
{
return NotFound();
}
user.Email = viewModel.ApplicationUser.Email;
user.FullName = viewModel.ApplicationUser.FullName;
user.Password = viewModel.ApplicationUser.Password;
user.Active = viewModel.ApplicationUser.Active;
var userRoles = _dbContext.UserRoles.Where(ur => ur.UserId == user.Id).ToList();
_dbContext.UserRoles.RemoveRange(userRoles);
var selectedRoleIds = viewModel.Roles
.Where(r => r.Selected)
.Select(r => r.Id).ToList();
foreach (var roleId in selectedRoleIds)
{
_dbContext.UserRoles.Add(new UserRole { UserId = user.Id, RoleId = roleId });
}
_dbContext.SaveChanges();
return RedirectToAction("Index");
}
Код: Выделить всё
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Replay.Models
{
public class UserRole
{
[Key]
public int Id { get; set; }
[ForeignKey("ApplicationUser")]
public int UserId { get; set; }
[ForeignKey("Role")]
public int RoleId { get; set; }
}
}
- удаление всех групп форм (а именно ApplicationUser.Email и ApplicationUser .Password), но все равно получаю ошибки. Возможно, интересно узнать, что при удалении ApplicationUser.Email и пароля с моей точки зрения, он конкретно сказал, что теперь отсутствуют ApplicationUser.Email, ApplicationUser.Password , адрес электронной почты и пароль.
- Добавление @Html.HiddenFor(), которое, очевидно, даже не скомпилируется, поскольку моя модель представления не поддерживает даже у меня нет адреса электронной почты и пароля.
- Я также пробовал добавить ? к адресу электронной почты и паролю в моем классе ApplicationUser.
Я ожидал, что модель быть действительным и не содержать каких-либо призрачных входных данных, а затем сделать его недействительным.
Подробнее здесь: https://stackoverflow.com/questions/785 ... required-e