C# 为什么在我的模型上验证不正确?

C# 为什么在我的模型上验证不正确?,c#,asp.net-mvc,unit-testing,C#,Asp.net Mvc,Unit Testing,属性不正确时,ModelState.IsValid将设置为true。我已经用required、Minimum/MaxLength等修饰了字段,但是ModelState.IsValid bool返回为true 这是因为我在测试时跳过了模型绑定,而它实际上没有执行验证吗 [Authorize(Roles = "A")] [AcceptVerbs(HttpVerbs.Post)] public ActionResult AddProject(Projects project) { if (pr

属性不正确时,ModelState.IsValid将设置为true。我已经用required、Minimum/MaxLength等修饰了字段,但是ModelState.IsValid bool返回为true

这是因为我在测试时跳过了模型绑定,而它实际上没有执行验证吗

[Authorize(Roles = "A")]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult AddProject(Projects project)
{
    if (project == null)
    {
        return HttpNotFound();
    }

    if (ModelState.IsValid)
    {
        using (var db = new DbContext())
        {
            db.ProjectModels.Add(project);
            db.SaveChanges(); //exception raised here.
        }
        return RedirectToAction("ListOfProjects", "Project");
    }
    return View("AddProject", project);
}

[TestMethod()]
public void AddProjectTestWithModel()
{
    //initialize
    var controller = new AdminController();
    var model = new Projects()
    {
        Name = "Project",
        Description = "Description",
        Duration = "1 Month"
    };
    var nullModel = new Projects();
    nullModel = null;
    var invalidModel = model;
    invalidModel.Description = null;
    invalidModel.Name = null;

    //setup
    var result = (RedirectToRouteResult)controller.AddProject(model) as RedirectToRouteResult;
    var modelFromDb = db.ProjectModels.Find(model.Id);
    var result2 = (HttpNotFoundResult)controller.AddProject(nullModel) as HttpNotFoundResult;
    var result3 = (ViewResult)controller.AddProject(invalidModel) as ViewResult;

    Assert.AreEqual("ListOfProjects", result.RouteValues["action"]);
    Assert.AreEqual(404, result2.StatusCode);
    Assert.AreEqual("AddProject", result3.ViewName); //UnitTest fails here.
}

知道为什么吗?我希望result3是ViewResult,ViewName是AddProject,因为ModelState.IsValid bool应该是false。为什么

找到了解决办法。当发布的数据绑定到视图模型时,会发生验证。当ibis直接进入控制器时,将跳过此操作。viewmodel是传递给控制器的,一旦模型被发布和绑定,验证就被检查了,在它进入控制器之前,这就是为什么代码中的中断点在测试表单时永远不会中断,因为它甚至不会到达控制器

如果你曾经有过类似的问题,希望这是有意义的