.NET MVC 模型过滤解决方法

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


这个是默认的过滤方法,他会在进入方法前进行模型验证,如果验证失败会返回原页面,但是在返回原页面之后,会导致原页面的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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值