代码之家  ›  专栏  ›  技术社区  ›  BritishDeveloper

更新我的模型然后重新评估是否有效?

  •  26
  • BritishDeveloper  · 技术社区  · 14 年前

    然后我设置缺少的值,但是我想验证模型,它仍然说false,因为ModelState似乎没有跟上我的更改。

    [HttpPost, Authorize]
    public ActionResult Thread(int id, string groupSlug, Comment comment, string submitButton)
    {
      comment.UserID = UserService.UID;
      comment.IP = Request.UserHostAddress;
      UpdateModel(comment); //throws invalidoperationexception
      if (ModelState.IsValid) // returns false if i skip last line
      {
        //save and stuff
        //redirect
      }
      //return view
    }
    

    最干净的方法是什么来轻拍ModelState的头部,告诉它一切都会好起来,同时仍然验证从用户帖子中绑定的所有其他内容

    2 回复  |  直到 14 年前
        1
  •  41
  •   KP.    14 年前

    如果缺少的值是模型所必需的,但在绑定之后才提供,则可能需要从 ModelState .

    [HttpPost, Authorize]
    public ActionResult Thread(int id, string groupSlug, Comment comment, string submitButton)
    {
      comment.UserID = UserService.UID;
      comment.IP = Request.UserHostAddress;
    
      //add these two lines
      ModelState["comment.UserID"].Errors.Clear();
      ModelState["comment.IP"].Errors.Clear();
    
      UpdateModel(comment); //throws invalidoperationexception
      if (ModelState.IsValid) // returns false if i skip last line
      {
        //save and stuff
        //redirect
      }
      //return view
    }
    
        2
  •  8
  •   Massimiliano Kraus The Angry Programmer    7 年前

    我使用的是ASP.NET Core1.0.0和异步绑定,解决方案是使用ModelState.Remove并传递属性名(不带对象名)。

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Submit([Bind("AerodromeID,ObservationTimestamp,RawObservation")] WeatherObservation weatherObservation)
    {
        weatherObservation.SubmitterID = this.User.FindFirst(ClaimTypes.NameIdentifier)?.Value;
        weatherObservation.RecordTimestamp = DateTime.Now;
    
        ModelState.Remove("SubmitterID");
    
        if (ModelState.IsValid)
        {
            _context.Add(weatherObservation);
            await _context.SaveChangesAsync();
            return RedirectToAction("Index", "Aerodrome");
        }
        return View(weatherObservation);
    }
    
        3
  •  1
  •   I.Boras    3 年前

    在使用.NET核心之前 Validate(TEntity entity) 假设您将缺少的必需属性设置为实体。

      ModelState.Clear();
      Validate(entity);
      if (!ModelState.IsValid) {}
    

    TryValidateModel 而不是 ModelState.IsValid 请参见: https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation?view=aspnetcore-5.0