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

OnActionExecuting()を使用する代わりに、OnActionExecuted()(ビューの結果を返す)を使用して解決しました。

于 2009-10-15T17:02:38.197 に答える