2009-08-09 3 views
5

ViewContext.RouteData.Values ​​[ "action"]이 스테이징 서버에서 null 인 이상한 문제가 있습니다. 하지만 내 dev에 기계 (asp.net 개발 서버)에서 잘 작동합니다.ViewContext.RouteData.Values ​​[ "action"] 서버에서 null입니다 ... 로컬 컴퓨터에서 잘 작동합니다.

코드는 간단하다 :

public string CheckActiveClass(string actionName) 
    { 
     string text = ""; 
     if (ViewContext.RouteData.Values["action"].ToString() == actionName) 
     { 
      text = "selected"; 
     } 
     return text; 
    } 

나는 [ "행동"] 라인 ViewContext.RouteData.Values에 오류가 발생합니다. 오류 :

예외 정보 : System.NullReferenceException : 개체 참조가 개체의 인스턴스로 설정되지 않았습니다.

도움을 주시면 감사하겠습니다. 미리 감사드립니다.

+0

어떤 해결책이 있습니까? 나는 지금 비슷한 문제가있다 ... –

+0

아니, 내가 논리와 그것이 작동하는 방식을 변경 결국. – rksprst

답변

2

dev 및 준비 서버에 다른 버전의 asp.net mvc가 있습니까? System.Web.Mvc를 로컬로 스테이징 서 v에 복사 한 후이를 수정하는지보십시오. (참조를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택하고 로컬 복사를 true로 변경하십시오.)

상황에 도움이 될 수도 있지만 도움이되지 않을 수도 있습니다. asp.net/mvc의 MVC 템플릿에서 도난당한 헬퍼 확장자는 다음과 같습니다.

/// <summary> 
/// Checks the current action via RouteData 
/// </summary> 
/// <param name="helper">The HtmlHelper object to extend</param> 
/// <param name="actionName">The Action</param> 
/// <param name="controllerName">The Controller</param> 
/// <returns>Boolean</returns> 
public static bool IsCurrentAction(this HtmlHelper helper, string actionName, string controllerName) 
{ 
    string currentControllerName = (string)helper.ViewContext.RouteData.Values["controller"]; 
    string currentActionName = (string)helper.ViewContext.RouteData.Values["action"]; 

    if (currentControllerName.Equals(controllerName, StringComparison.CurrentCultureIgnoreCase) && currentActionName.Equals(actionName, StringComparison.CurrentCultureIgnoreCase)) 
     return true; 

    return false; 
} 
+0

방금 ​​copy 로컬로 다시 게시하고 동일한 오류가 발생합니다 ... – rksprst

+0

아마 위에서 시도해보십시오 : System.Web.Abstractions, System.Web.Extensions, System.Web.Mvc 및 System.Web.Routing? 나는 그 asp.net에 의해 사용되는 네 개의 참조 생각합니다. –

+0

내가 재발행했을 때, 나는 모든 MVC 관련 dll에 "로컬 복사"를 했으므로 그 대신에 다른 asp.net dll을 사용했다. 난 왜 그것이 dev에 작동하고 서버를 스테이징하지 않을지 모르겠다. – rksprst

0
내가 한 곳을 작동하지 다른,하지만 이유를 말할 수

:

  1. 당신은 널 (VAR 경로를 정확히 파악하기 위해 여러 라인들로 코드를 중단해야 = ViewContext.RouteData; var 값 = ...;) 등

  2. 어디에서 CheckActiveClass를 호출하고 있습니까? 몇시에? 그게 어디있어? ViewContext는 항상 모든 곳에서 사용할 수있는 것은 아닙니다. 그러나 # 1 후에는 사용할 수없는 것을 더 잘 알 수 있습니다.

제임스

+0

viewpages의 코드 숨김에서 사용하고 있습니다. 또한 마스터 페이지의 코드 숨김에서도 마찬가지입니다. 오류가있는 부분을보기 위해 나눌 것입니다. dev 머신에서 작동하기 때문에 그것은 이상하지만, 스테이징 서버에서는 작동하지 않습니다. – rksprst

0

수도

를 사용하여 시도 문자열 currentController ViewContext.RouteData.Values ​​= [ "제어기"] ToString().; String currentAction = ViewContext.RouteData.Values ​​[ "Action"]. ToString(); 문자열 currentID = ViewContext.RouteData.Values ​​[ "ID"]. ToString();