我们这里将要谈到的是ASP.NET MVC PRG数据验证,主要是参考一些国外关于PRG数据验证的文章,希望对大家有所帮助。
我的理念:
既然是ASP.NET MVC,那就肯定要用PRG。但是简单的PRG不能在输入页面显示Html.ValidationMessage,另一个就是之前的数据会被全部清空或者初始化了。
想想要我是打了半天的字一下全没了那多惨啊。你的访客不气傻了才怪。
OK,Google一下,找到了http://weblogs.asp.net/rashid/archive/2009/04/01/asp-net-mvc-best-practices-part-1.aspx
阿,他叫什么名字我不认识,我也看不懂英文的版权声明,所以这只有个链接没署名了。谁认识他叫他写个C#版或者VB.NET版的版权声明吧,谢谢。
英文不好不要紧,直接看第13点:Use PRG Pattern for Data Modification
- Controller
- [AcceptVerbs(HttpVerbs.Get), OutputCache(CacheProfile = "Dashboard"), StoryListFilter, ImportModelStateFromTempData]
- public ActionResult Dashboard(string userName, StoryListTab tab, OrderBy orderBy, int? page)
- {
-
- return View();
- }
-
- [AcceptVerbs(HttpVerbs.Post), ExportModelStateToTempData]
- public ActionResult Submit(string userName, string url)
- {
- if (ValidateSubmit(url))
- {
- try
- {
- _storyService.Submit(userName, url);
- }
- catch (Exception e)
- {
- ModelState.AddModelError(ModelStateException, e);
- }
- }
-
- return Redirect(Url.Dashboard());
- }
自定义了两个ActionFilter,阿,作者好像打错别字了。您别在意。
- ModelStateTempDataTransfer
- public abstract class ModelStateTempDataTransfer : ActionFilterAttribute
- {
- protected static readonly string Key = typeof(ModelStateTempDataTransfer).FullName;
- }
-
- public class ExportModelStateToTempData : ModelStateTempDataTransfer
- {
- public override void OnActionExecuted(ActionExecutedContext filterContext)
- {
- //Only export when ModelState is not valid
- if (!filterContext.Controller.ViewData.ModelState.IsValid)
- {
- //Export if we are redirecting
- if ((filterContext.Result is RedirectResult) || (filterContext.Result is RedirectToRouteResult))
- {
- filterContext.Controller.TempData[Key] = filterContext.Controller.ViewData.ModelState;
- }
- }
-
- base.OnActionExecuted(filterContext);
- }
- }
-
- public class ImportModelStateFromTempData : ModelStateTempDataTransfer
- {
- public override void OnActionExecuted(ActionExecutedContext filterContext)
- {
- ModelStateDictionary modelState = filterContext.Controller.TempData[Key] as ModelStateDictionary;
-
- if (modelState != null)
- {
- //Only Import if we are viewing
- if (filterContext.Result is ViewResult)
- {
来源:
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf】
打赏
扫码打赏,您说多少就多少