【发布时间】:2022-09-25 04:31:04
【问题描述】:
即使带有 Required 注释的属性具有有效值,ModelState.IsValid 也会返回 false。我记录了对象的字符串表示形式,它显示用户名和密码不为空。
用户模型
public class User
{
public int Id { get; set; }
[Required]
public string Username { get; set; }
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
public override string ToString()
{
return $\"Username: {Username}, Password: {Password}\";
}
}
控制器
public class AuthController : Controller
{
private readonly UserContext _context;
private readonly ILogger<User> _logger;
[BindProperty]
public User AuthUser { get; set; }
public AuthController(ILogger<User> logger, UserContext context)
{
_logger = logger;
_context = context;
}
public IActionResult Login()
{
return View(new User());
}
[HttpPost]
public async Task<IActionResult> Login(string returnURL = null)
{
if (!ModelState.IsValid)
{
_logger.LogInformation(AuthUser.ToString());
//Executes this block even if Username and Password has data
}
}
-
正如预期的那样,您收到 ModelState 错误,您正在将一个
User对象从 View 发布到 Controller,而您的 Controller(登录 POST 方法)预计会收到一个字符串值。您的 Login (Post) 方法应该会收到User对象。 -
ModelState为您提供默认模型绑定器的状态。在您的帖子请求中,您不接受User对象。如果您在发布请求中不接受用户对象,则默认模型绑定器无法更新为您的预期结果。
标签: c# asp.net-mvc asp.net-core model-view-controller