Ошибка проверки формы ASP.NET Core 6.0: «Поле fieldNameHere является обязательным». хотя такого поля не существуетC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка проверки формы ASP.NET Core 6.0: «Поле fieldNameHere является обязательным». хотя такого поля не существует

Сообщение Anonymous »

Я создаю веб-приложение ASP.NET Core 6.0.
Моя проверка формы не работает, и когда я вывожу ошибки 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

Код C#:

Код: Выделить всё

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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»