0

ActionFilterAttribute를 사용하여 (쿼리 문자열의 "TargetCode"를 기반으로) 데이터베이스에서 masterpage 내용을로드하려고했습니다.)ViewData in ActionFilterAttribute - 객체 참조가 객체의 인스턴스로 설정되지 않았습니다.

public override void OnActionExecuting(ActionExecutingContext filterContext) 

{ HomeRepository의 시간 = 새로운 HomeRepository (; 그러나, 나는 데이터베이스에서 반환 된 데이터에을 ViewData를 설정하는 문제가있어, 여기에 코드입니다

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가하는 것을 보여줍니다 데이터베이스에서 가져온 데이터가 있지만 결과로 설정할 수 없습니다 .ViewData [ "ThemeData"]. 오류는 "개체 참조가 개체의 인스턴스로 설정되지 않았습니다."입니다. 그 줄에.

도움을 주시면 감사하겠습니다. 대단히 감사합니다.

+0

"result"는 실제로는 null이며 ThemeData는 아닙니다. 누구든지 결과 (ViewResult)를 렌더링하는 방법을 알고 있습니까? –

답변

0

OnActionExecuted() (보기 결과를 반환 함)를 사용하여 OnActionExecuting()을 사용하지 않고 해결했습니다.

관련 문제