2011-09-12 51 views
1

這是我的類,它基本上是用於UnitForWork模式即節省一切事務:如何在ActionFilter中獲取對ModelState屬性的引用?

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(); 
       } 
      } 
     } 
    } 

這工作得很好。但是,我還想確保只有在我的操作方法中ModelState.IsValid屬性爲true時才保存它。我該怎麼做?

回答

3

filterContext.Controller給你參考ControllerBase而不是Controller。如果你將它轉換爲Controller它會給你訪問ModelState這是控制器類的像

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

目前公共財產,我不知道這是鑄件的影響。使用前請諮詢一下後果。
UPDATE:
您還可以訪問的ModelState屬性像

filterContext.Controller.ViewData.ModelState 

,它不涉及鑄造

相關問題