ModelState.IsValid不验证模型

Ray*_*Ray 2 c# asp.net-mvc-3

我的Model类如下:

public class PostInputViewModel
    {
        [Required]
        [MinLength(1)]
        [MaxLength(125)]
        public string Title { get; set; }

        [Required]
        [AllowHtml]
        [Display(Name="Content")]
        public string Content { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

和控制器如下:

[HttpPost]
        public ActionResult Write(PostInputViewModel input)
        {
            if (!ModelState.IsValid)
                return View(input);

            var post = new Post
            {
                Title = input.Title,
                Content = input.Content,
                DateCreated = DateTime.Now,
                DateModified = DateTime.MaxValue,
            };

            dbContext.Posts.Add(post);
            dbContext.SaveChanges();

            return RedirectToAction("Index", "Home");
        }
Run Code Online (Sandbox Code Playgroud)

当我通过单击F5运行Web应用程序时,如果我没有输入标题和内容值,则ModelState.IsValid为false,但是如果我使用单元测试用例测试控制器类,则ModelState.IsValid始终为true.测试用例如下:

[TestMethod]
        public void write_should_validate_model()
        {
            var input = new PostInputViewModel();
            input.Title = null;
            input.Content = null;
            var actionResult = controller.Write(input) as ViewResult;

            Assert.IsFalse(actionResult.ViewData.ModelState.IsValid);
        }
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?提前致谢.

Jac*_*cob 9

如果您想让控制器尝试验证模型,可以TryValidateModel在断言之前调用该方法:

controller.TryValidateModel(input);
Run Code Online (Sandbox Code Playgroud)

但我同意你真的只是测试验证属性.不过可能没问题; 它将验证您的模型是否已应用预期属性.