2009-08-09 13 views
5

Mam dziwny problem, gdy ViewContext.RouteData.Values ​​["action"] ma wartość null na moim serwerze pomostowym, ale działa dobrze na moim komputerze dev (serwer rozwoju asp.net).ViewContext.RouteData.Values ​​["action"] ma wartość NULL na serwerze ... działa dobrze na lokalnej maszynie

Kod jest prosty:

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

pojawia się błąd na ViewContext.RouteData.Values ​​[ "akcja"] linia. Błąd:

Szczegóły wyjątku: System.NullReferenceException: Odwołanie do obiektu nie jest ustawione na wystąpienie obiektu.

Każda pomoc jest doceniana. Z góry dziękuję.

+0

Czy znalazłeś jakieś rozwiązanie tego problemu? Teraz mam podobny problem ... –

+0

Nie, nie, zmieniłem logikę i sposób jej działania. – rksprst

Odpowiedz

2

Czy masz różne wersje asp.net mvc na swoim serwerze i serwerach pomostowych? Spróbuj skopiować lokalnie System.Web.Mvc na serwer pomostowy i sprawdź, czy to naprawia. (Kliknij prawym przyciskiem myszy odwołanie, wybierz właściwości i zmień Kopiuj lokalnie na true)

To może, ale nie musi, pomóc w twojej sytuacji, ale tutaj jest rozszerzenie pomocnika ukradłem z szablonu MVC na asp.net/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

Po prostu ponownie opublikowałem z kopią lokalną i pojawia się ten sam błąd ... – rksprst

+0

może wypróbować powyższe na: System.Web.Abstractions, System.Web.Extensions, System.Web.Mvc i System.Web.Routing? Myślę, że są to cztery odwołania używane przez asp.net. –

+0

Po ponownym opublikowaniu, zrobiłem "copy local" na wszystkich bibliotekach powiązanych z MVC ... więc te plus niektóre inne zwykłe biblioteki DLL ASP.NET na wszelki wypadek. Po prostu nie rozumiem, dlaczego to działałoby na dev, a nie na serwerze testowym. – rksprst

0

nie mogę mówić, dlaczego to działa jedno miejsce, a nie inny, ale:

  1. należy złamać kod na kilka linii, aby dowiedzieć się dokładnie, co ma wartość null (trasa var = ViewContext.RouteData; var values ​​= ...;), itp.

  2. Skąd dzwonisz do CheckActiveClass? Kiedy? Gdzie się znajduje? ViewContext nie zawsze jest dostępny wszędzie. Ale będziesz mieć lepsze pojęcie o tym, co nie jest dostępne po # 1.

James

+0

Używam go na kodzie strony widoku. Jak również na stronie kodowej strony głównej. Rozwalę to, żeby zobaczyć, gdzie to jest błędne. To dziwne, ponieważ działa na komputerze programisty, ale nie na serwerze testowym. – rksprst

0

Użyj literami

ciąg currentController = ViewContext.RouteData.Values ​​[ "Kontroler"] toString (.); String currentAction = ViewContext.RouteData.Values ​​["Action"]. ToString(); Łańcuch currentID = ViewContext.RouteData.Values ​​["ID"]. ToString();

Powiązane problemy