2009-08-28 16 views
0

我創建了一個OnActionExecuted過濾器來填充一些viewmodel屬性與數據從數據庫(我沒有使用ViewData [「somekey」],喜歡許多ViewModels降序一個共同的祖先)。ASP.NET MVC:不執行actionfilters的重定向和拋出HttpException

public class BaseController : Controller 
{ 
    protected DataClassesDataContext context = new DataClassesDataContext(); 

    protected override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     ViewModel model = (ViewModel) ViewData.Model; 
     model.IsUserAuthenticated = filterContext.HttpContext.User.Identity.IsAuthenticated; 
     if (model.IsUserAuthenticated) 
     { 
      model.UserName = filterContext.HttpContext.User.Identity.Name; 
     } 
     model.CommonAttribute = from c in context.Something select new SomethingElse() {...}; 
    } 
} 

的問題是,當在一個重定向的動作的結果或404錯誤,OnActionExecuted試圖訪問視圖模型,其尚未被初始化。而且,填充這些值完全沒用,因爲它們不會被使用,因爲另一個動作將被調用。

如何避免在重定向上填充viewodel?

回答

2

一個平凡的解決辦法是在模型中不填的時候它不存在:

ViewModel model = ViewData.Model as ViewModel; 
if (model != null) 
{  
    model.IsUserAuthenticated = filterContext.HttpContext.User.Identity.IsAuthenticated; 
    if (model.IsUserAuthenticated) 
    { 
     model.UserName = filterContext.HttpContext.User.Identity.Name; 
    } 
    model.CommonAttribute = from c in context.Something select new SomethingElse() {...}; 
} 
+0

爲什麼不呢?謝謝 – giorgian 2009-08-28 17:11:57