【问题标题】:ViewData in ActionFilterAttribute - Object reference not set to an instance of an objectActionFilterAttribute 中的 ViewData - 对象引用未设置为对象的实例
【发布时间】:2009-10-14 17:21:40
【问题描述】:

我一直在尝试使用 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"]。错误是“对象引用未设置为对象的实例”。在那条线上。

感谢任何帮助。 非常感谢。

【问题讨论】:

  • 看来“结果”实际上为空,而不是 ThemeData。任何人都知道如何获得结果(ViewResult)来呈现?

标签: model-view-controller viewdata actionfilterattribute


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    相关资源
    最近更新 更多