我一直在尝试使用 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"]。错误是“对象引用未设置为对象的实例”。在那条线上。
任何帮助表示赞赏。非常感谢。