Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Model view controller ActionFilterAttribute中的ViewData-对象引用未设置为对象的实例_Model View Controller_Viewdata_Actionfilterattribute - Fatal编程技术网

Model view controller ActionFilterAttribute中的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

我一直在尝试使用ActionFilterAttribute从数据库(基于querystring中的“TargetCode”)加载母版页内容。但是,我在将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;