MVC 2 的验证问题:ModelState.IsValid
假设我在model里面有两个model:1.ArticleModel,2.CommentModel.
ArticleModel 的标题需要验证是否为空。
现在,我需要在一个新的页面组合这两个Model,DetailModel包含上面两个Model。在Deitail(Model是DetailModel)页面我展示了帖子的内容,但是,当我要评论的时候,即Post CommentModel的时候,ArticleModel也需要验证。
请问:有什么办法,让ArticleModel在Post.aspx(Model为ArticleModel)的页面需要验证,而在Detail.aspx里面不要验证呢?
回答:
KeFang ChenMicrosoft Contingent Staff, Moderatore
你好,
一般我们在提交数据的时候才需要验证。
举个例子:
假设在我们创建一篇article的时候,标题是必须的。可能在实体定义的时候有个对应的Title属性。这时我么可以用Required特性来修饰该属性。该特性在System.ComponentModel.DataAnnotations下。
public class LogOnModel { [Required] [DisplayName("User name")] public string UserName { get; set; } [Required] [DataType(DataType.Password)] [DisplayName("Password")] public string Password { get; set; } [DisplayName("Remember me?")] public bool RememberMe { get; set; } }
所以如果要验证,那只要在view上输出相应的textbox用来接收输入,那提交后DefaultBindModel会自动进行验证。
如果不想验证,那只好采取一种办法,如把ModelState中对应的不需要验证的属性给删除后再判断ModelState.IsValid。
e.g
ModelState.Remove("Title");
http://social.microsoft.com/Forums/it-IT/295/thread/b59f922e-6e84-4dd7-abe3-0658545415f0