【问题标题】:ModelState.IsValid returns False even if the required property is valid即使所需的属性有效,ModelState.IsValid 也会返回 False
【发布时间】: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


【解决方案1】:
    public IActionResult Login()
    {
        return View(new User());
    }

    [HttpPost]
    public async Task<IActionResult> Login(User model,string returnURL = null)
    {
        if (ModelState.IsValid) 
        {
             _logger.LogInformation(model.ToString());
        }
        return View(model);
    }

【讨论】:

    【解决方案2】:

    我有同样的问题很长一段时间,终于我找到了。就我而言,它是 Id 字段:)

    只需放置一个断点并在运行时检查您的 ModelState 并转到此部分:

    模型状态 -> 根 -> 子项

    你会看到所有有效和无效的钥匙

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-08
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      • 2012-03-05
      • 1970-01-01
      相关资源
      最近更新 更多