ViewData в ActionFilterAttribute — ссылка на объект не указывает на экземпляр объекта

Я пытался загрузить содержимое мастер-страницы из базы данных (на основе «TargetCode» в строке запроса), используя ActionFilterAttribute. Однако у меня возникла проблема с настройкой ViewData на данные, возвращаемые из базы данных, вот код:

public override void OnActionExecuting(ActionExecutingContext filterContext)

{ HomeRepository hr = new HomeRepository();

var result = filterContext.Result as ViewResult;
string TargetCode = string.Empty;
Controller control = filterContext.Controller as Controller;
System.Collections.Specialized.NameValueCollection query = filterContext.HttpContext.Request.QueryString;

if (query.Count > 0 && query["TargetCode"] != null && query["TargetCode"].ToString() != "")
    TargetCode = query["TargetCode"].ToString();

if (string.IsNullOrEmpty(TargetCode))
    if (control != null)
    {
        filterContext.Result = new RedirectToRouteResult(new System.Web.Routing.RouteValueDictionary(new { controller = "Home", action = "NoCode" }));
        return;
    }

if (!hr.CheckTargetCodeExists(TargetCode))
{
    if (control != null)
    {
        filterContext.Result = new RedirectToRouteResult(new System.Web.Routing.RouteValueDictionary(new { controller = "Home", action = "InvalidCode" }));
        return;
    }
}

// IF CODE IS VALID, GET THE MASTERPAGE CONTENT AND STORE IT IN VIEWDATA
var ThemeData = hr.GetMasterPageContent(TargetCode);
result.ViewData["ThemeData"] = ThemeData;

}

Все работает как положено, кроме последней строки (result.ViewData["ThemeData"] = ThemeData;)

Когда я отлаживаю код, он показывает, что у ThemeData есть данные, которые я получил из базы данных, но я не могу установить для них значение result.ViewData["ThemeData"]. Ошибка: «Ссылка на объект не указывает на экземпляр объекта». на этой линии.

Любая помощь приветствуется. Большое Вам спасибо.


person Xuan Vu    schedule 14.10.2009    source источник
comment
Похоже, что результат на самом деле нулевой, а не ThemeData. Кто-нибудь знает, как получить результат (ViewResult) для рендеринга?   -  person Xuan Vu    schedule 14.10.2009


Ответы (1)


Решено с помощью OnActionExecuted() (который возвращает результат представления) вместо использования OnActionExecuting().

person Xuan Vu    schedule 15.10.2009