2009-08-09 30 views
5

Tôi gặp vấn đề lạ khi ViewContext.RouteData.Values ​​["action"] là null trên máy chủ dàn dựng của tôi, nhưng hoạt động tốt trên máy dev của tôi (máy chủ phát triển asp.net).ViewContext.RouteData.Values ​​["action"] là null trên máy chủ ... hoạt động tốt trên máy cục bộ

Mã này rất đơn giản:

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

tôi nhận được lỗi trên ViewContext.RouteData.Values ​​[ "hành động"] dòng. Lỗi này là:

Chi tiết ngoại lệ: System.NullReferenceException: Tham chiếu đối tượng không được đặt thành thể hiện của đối tượng.

Mọi trợ giúp đều được đánh giá cao. Cảm ơn trước.

+0

Bạn có tìm thấy giải pháp nào cho điều này không? Bây giờ tôi có một vấn đề tương tự ... –

+0

Không, tôi đã không thay đổi logic và cách nó hoạt động. – rksprst

Trả lời

2

Bạn có các phiên bản khác nhau của asp.net mvc trên máy chủ dev và dàn dựng của mình không? Hãy thử sao chép System.Web.Mvc cục bộ vào máy chủ dàn dựng và xem có khắc phục được không. (Nhấp chuột phải vào tham chiếu, chọn thuộc tính và thay đổi Sao chép địa phương thành đúng)

Điều này có thể có hoặc không giúp được tình huống của bạn, nhưng đây là phần mở rộng trợ giúp tôi đã lấy mẫu từ MVC trên 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

Tôi vừa tái xuất bản với bản sao cục bộ và tôi nhận được cùng một lỗi ... – rksprst

+0

có thể thử trên ở trên: System.Web.Abstractions, System.Web.Extensions, System.Web.Mvc và System.Web.Routing? Tôi nghĩ rằng đó là bốn tài liệu tham khảo được sử dụng bởi asp.net. –

+0

Khi tôi tái xuất bản, tôi đã làm "sao chép địa phương" trên tất cả các dlls liên quan đến MVC ... vì vậy những cộng với một số dlls asp.net thường xuyên chỉ trong trường hợp. Tôi chỉ không thấy lý do tại sao nó sẽ làm việc trên dev và không phải trên máy chủ dàn dựng. – rksprst

0

tôi không thể nói tại sao nó hoạt động một chỗ và không khác, nhưng:

  1. Bạn nên phá vỡ các mã thành nhiều dòng để hình dung ra là chính xác những gì null (var đường = ViewContext.RouteData; var values ​​= ...;), v.v.

  2. Bạn đang gọi CheckActiveClass từ đâu? Vào lúc mấy giờ? Nó nằm ở đâu? ViewContext không phải lúc nào cũng có sẵn ở mọi nơi. Nhưng bạn sẽ có ý tưởng tốt hơn về những gì không có sẵn sau # 1.

James

+0

Tôi đang sử dụng nó trên codebehind của trang xem. Cũng trên codebehind của masterpage. Tôi sẽ chia nhỏ nó để xem nó bị lỗi ở đâu. Nó chỉ là lạ vì nó hoạt động trên máy dev, nhưng không phải trên máy chủ dàn dựng. – rksprst

0

Hãy thử sử dụng vốn

Chuỗi currentController = ViewContext.RouteData.Values ​​[ "điều khiển"] ToString(). Chuỗi hiện hànhHành động = ViewContext.RouteData.Values ​​["Action"]. ToString(); Chuỗi currentID = ViewContext.RouteData.Values ​​["ID"]. ToString();

Các vấn đề liên quan