.NET MVC 模型过滤解决方法

来源:互联网 发布:移动数据不能看h小说 编辑:程序博客网 时间:2024/05/16 11:15

在写毕业设计过程中遇到了一个问题,关于模型过滤问题。


这个是默认的过滤方法,他会在进入方法前进行模型验证,如果验证失败会返回原页面,但是在返回原页面之后,会导致原页面的model,ViewBag为null,直接报错。

    public class ValidateModelStateAttribute : ActionFilterAttribute    {        public override void OnActionExecuting(ActionExecutingContext filterContext)        {            if (!filterContext.Controller.ViewData.ModelState.IsValid)            {                filterContext.Result = new ViewResult                {                    ViewData = filterContext.Controller.ViewData,                    TempData = filterContext.Controller.TempData                };            }            base.OnActionExecuting(filterContext);        }    }
原因是这个过滤方法的Result里只包含了错误信息,而没有包含原来的页面数据。


这个过滤方法是模版原有的,改动的话,会导致其他地方报错。


所以只能在控制器的方法里面改动。

这个是改动之前的方法代码。

<span style="white-space:pre"></span>/// <summary>        /// 修改-任务总概        /// </summary>        /// <param name="title"></param>        /// <returns></returns>        [HttpPost]        [ValidateModelState]        public ActionResult Edit(T_TaskTitle title)        {            var model = _manageService.GetTaskTitleById(title.Id);            model.PlanTime = Convert.ToDateTime(title.VPlanTime);            model.VPlanTime = title.VPlanTime;            model.AttributeId = title.AttributeId;            model.Remark = title.Remark;            _manageService.CreateOrEditTaskTitle(model);            //关闭模态窗            return Content("<script> parent.location.reload(1);</script>");        }

这个是改动之后的方法代码,完美解决了这个问题。

 <span style="white-space:pre"></span>/// <summary>        /// 修改-任务总概        /// </summary>        /// <param name="collection"></param>        /// <returns></returns>        [HttpPost]        public ActionResult Edit(FormCollection collection)        {            T_TaskTitle title = new T_TaskTitle();            if (!TryUpdateModel(title))            {                var attributeid  = _manageService.GetTaskTitleById(title.Id).AttributeId;                ViewBag.TypeId = _manageService.GetAttributeById(attributeid).TypeId;                return View("Edit");            }            var model = _manageService.GetTaskTitleById(title.Id);            model.PlanTime = Convert.ToDateTime(title.VPlanTime);            model.VPlanTime = title.VPlanTime;            model.AttributeId = title.AttributeId;            model.Remark = title.Remark;            _manageService.CreateOrEditTaskTitle(model);            //关闭模态窗            return Content("<script> parent.location.reload(1);</script>");        }

最关键的方法是,TryUpdateModel(),这个方法能将提交的数据更新到实体类中,自动验证字段是否有效,从而保证提交的数据的有效性。


以上。

0 0
原创粉丝点击