ASP.NET MVC: не выполняются фильтры действий при перенаправлении и генерируется исключение HttpException - PullRequest
0 голосов
/ 28 августа 2009

Я создал фильтр OnActionExecuted для заполнения некоторых атрибутов viewmodel данными из db (я не использую ViewData ["somekey"], предпочитая множество ViewModels, происходящих от общего предка).

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 пытается получить доступ к ViewModel, который не был инициализирован. Кроме того, заполнять эти значения совершенно бесполезно, поскольку они не будут использоваться, поскольку будет вызвано другое действие.

Как мне избежать заполнения viewodel при перенаправлении?

1 Ответ

2 голосов
/ 28 августа 2009

Тривиальным решением было бы не заполнять модель, когда она не существует:

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