ASP.NET MVC案例教程(基于ASP.NET MVC beta)—第五篇:MVC整合Ajax
goryService(); 18 List<CategoryInfo> categories = cServ.GetAll(); 19 ViewData["Categories"] = new SelectList(categories, "ID", "Name"); 20 return View("Release"); 21 } 22 23 public ActionResult DoRelease() 24 { 25 if (String.IsNullOrEmpty(Request.Form["Title"]) || String.IsNullOrEmpty(Request.Form ["Content"])) 26 { 27 if (String.IsNullOrEmpty(Request.Form ["Title"])) 28 { 29 ViewData.ModelState.AddModelError ("TitleValidator","公告标题不能为空!"); 30 } 31 if (String.IsNullOrEmpty(Request.Form["Content"])) 32 { 33 ViewData.ModelState.AddModelError("ContentValidator", "公告内容不能为空!"); 34 } 35 36 return Release(); 37 } 38 39 AnnounceInfo announce = new AnnounceInfo() 40 { 41 ID = 1, 42 Title = Request.Form ["Title"], 43 Category = Int32.Parse(Request.Form["Category"]), 44 Content = Request.Form["Content"], 45 }; 46 47 IAnnounceService aServ = ServiceBuilder.BuildAnnounceService(); 48 aServ.Release(announce); 49 50 ViewData ["Announce"] = announce; 51 return View("ReleaseSucceed"); 52 } 53 } 54} 可以看到,我们的DoRelease这个Action方法多了不少东西。我们看多了什么:当从表单传递过来的标题或内容为空 时,我们做了一定处理。注意,这个ViewData.ModelState.AddModelError方法,它就是往我们刚才说的由Html.ValidationMessage生成的span 里加入错误信息的方法,它可以有两个参数,第一个指明哪个span,这个参数Html.ValidationMessage中的参数是对应的。第二个参数就是要 显示的信息。 相信结合视图和控制器,已经很好理解了。最后,如果标题或内容有空值的话,我们不再调用业务逻辑组件处理了,而是 调用了Release这个Action。为什么我们不用Redirect呢?因为我们要保持ViewData中的数据,刚才我们的错误信息可都放在里面的,而使用了 Redirect,ViewData的信息就传不过去了。 现在,我们再来发布公告。我们故意什么都不填,提交,看结果: 没有问题,我们的程序成功对标题和内容进行了完整性检测 (这里就是均不能为空),在验证不通过时,返回了发布公告视图并正确显示了错误提示信息。 也许你有一个疑问,为什么第一次请求 Release视图时没有显示任何错误信息呢?因为那时ViewData中的ModelError是空的。而Html.ValidationMessage生成的标签会自动寻找 ModelError中同名的错误信息,找不到,当然是空的了。而在提交空信息时,DoRelease这个Action为ViewData的ModelError添加了内容,于是 当再次返回Release视图时,相应信息就显示在我们指定的位置了。 使用ASP.NET AJAX实现客户端数据验证 上面的代码运行起来 没问题,也达到了我们的要求。但是验证标题内容是否为空这种行为在客户端应该就可以完成。当然,为了放置恶意攻击或浏览器将 JavaScript屏蔽的情况,我们应该在后台进行验证,但是我们不能每次都将这种请求发到 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |