ASP.NET MVC3中Model的服务端验证小问题
Asp.net Mvc3中model增加了好几种验证方式,都非常不错,具体的使用可以在园子里搜搜,都讲的很详细,特别是客户端验证使用了jquery的validate插件,非常不错,但是有次我新建了一个control和view时,在调试时把浏览器的js禁用掉之后,发现model的验证居然“失效”了,找了半天原因,还以为是哪里配置把服务端验证给关了,结果找了好几个小时的原因,网上找了好久,发现不是配置问题,是写control方法的时候传递的形参是FormColletion的而不是Model,所以Model的验证并没有执行。。。。。郁闷,后来关注了下,使用FormColletion来传递参数,要在服务端验证就需要如此写
Movie m =new Movie();
//使用UpdateModel方法
UpdateModel<Movie>(m);
if (m.Title.Trim().Length ==0)
{
ModelState.AddModelError("Title", "Title 不能为空!");
}
if (m.Director.Trim().Length ==0)
{
ModelState.AddModelError("Director", "Director 不能为空!");
}
if (!ModelState.IsValid)
{
return View();
}
//使用UpdateModel方法
UpdateModel<Movie>(m);
if (m.Title.Trim().Length ==0)
{
ModelState.AddModelError("Title", "Title 不能为空!");
}
if (m.Director.Trim().Length ==0)
{
ModelState.AddModelError("Director", "Director 不能为空!");
}
if (!ModelState.IsValid)
{
return View();
}
这里要注意的是,如果直接使用FormColletion来取值,直接写 “Colletion["Title"]”是取不出来值的,所以我们使用 UpdateModel来更新一个model就行了
参考文章:http://www.cnblogs.com/jiessie327/archive/2009/11/30/1582117.html