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