Model view controller ActionFilterAttribute中的ViewData-对象引用未设置为对象的实例
我一直在尝试使用ActionFilterAttribute从数据库(基于querystring中的“TargetCode”)加载母版页内容。但是,我在将ViewData设置为从数据库返回的数据时遇到问题,下面是代码:Model view controller ActionFilterAttribute中的ViewData-对象引用未设置为对象的实例,model-view-controller,viewdata,actionfilterattribute,Model View Controller,Viewdata,Actionfilterattribute,我一直在尝试使用ActionFilterAttribute从数据库(基于querystring中的“TargetCode”)加载母版页内容。但是,我在将ViewData设置为从数据库返回的数据时遇到问题,下面是代码: public override void OnActionExecuting(ActionExecutingContext filterContext) { HomeRepository hr=新建HomeRepository() } 除了最后一行(result.ViewData
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HomeRepository hr=新建HomeRepository()
}
除了最后一行(result.ViewData[“ThemeData”]=ThemeData;)之外,所有内容都正常工作
当我调试代码时,它显示ThemeData确实有我从数据库返回的数据,但我不能将其设置为result.ViewData[“ThemeData”]。该行的错误是“对象引用未设置为对象的实例”
感谢您的帮助。
非常感谢。通过使用OnActionExecuted()(返回视图结果)而不是使用OnActionExecuting(),解决了这个问题。看起来“结果”实际上是空的,而不是主题数据。有人知道如何获得要渲染的结果(ViewResult)吗?
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;