0

我一直在尝试使用 ActionFilterAttribute 从数据库加载母版页内容(基于查询字符串中的“TargetCode”)。但是,我在将 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"]。错误是“对象引用未设置为对象的实例”。在那条线上。

任何帮助表示赞赏。非常感谢。

4

1 回答 1

0

通过使用 OnActionExecuted()(返回视图结果)而不是使用 OnActionExecuting() 解决。

于 2009-10-15T17:02:38.197 回答