如何在ActionFilter中引用ModelState属性?

时间:2011-09-12 04:49:49

标签: c# asp.net-mvc asp.net-mvc-3

这是我的类,它主要用于UnitForWork模式,即保存事务中的所有内容:

public class TestFilterAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            base.OnActionExecuted(filterContext);
            if (filterContext.HttpContext == null)
                throw new NullReferenceException("null");
            else
            {
                ObjectContext objectContext = (ObjectContext)filterContext.HttpContext.Items
                                                                [ObjectContextManager.TestContext];

                if (objectContext != null)
                {
                    objectContext.SaveChanges();
                }
            }
        }
    }

这很好用。但是,我还想确保只有在我的action方法中ModelState.IsValid属性为true时才保存它。我怎么能这样做?

1 个答案:

答案 0 :(得分:3)

filterContext.Controller为您提供ControllerBase而非Controller的参考。如果你将它转换为Controller,它将允许你访问ModelState,这是控制器类的公共属性,如

var val = ((Controller)filterContext.Controller).ModelState.IsValid; 

目前,我不知道这个演员有什么影响。使用前请先查询一下后果 的更新:
您还可以访问Modelstate属性,如

filterContext.Controller.ViewData.ModelState

并且它不涉及铸造