2009-07-31 16 views
33

Tôi có một số SuperController sẽ được kế thừa từ tất cả các bộ điều khiển. Trong hàm tạo, tôi đang cố gắng điền vào ViewData bằng cách sử dụng Tên bộ điều khiển và Tên hành động.Nhận ControllerName và ActionName và điền vào ViewData trong trang chính?

Tôi sẽ không chuyển Tên bộ điều khiển và Tên hành động làm Chế độ xem. Tôi đã có một phương pháp cần ControllerName và ActionName và tôi cần phải vượt qua giá trị trả về của phương thức như là ViewData.

Tôi có thể làm như thế nào?

+0

cho việc hành động, tên điều khiển mất cái nhìn lúc này http://stackoverflow.com/a/31749391/4293929 – MstfAsan

Trả lời

63

Không sử dụng ViewData. Sử dụng điều này trong Site.Master của bạn thay vì:

<%= ViewContext.RouteData.Values["Controller"] %> 
<%= ViewContext.RouteData.Values["Action"] %> 

SO - Getting the name of the controller and action method in the view in ASP.Net MVC

+0

Những tên sẽ phản ánh vỏ đề nghị url. Những gì bạn làm với họ không nên phân biệt chữ hoa chữ thường. (Tôi rơi vào cái bẫy đó.) –

3

Giả sử rằng tôi đang đọc bài viết của bạn một cách chính xác, và bạn không cố gắng để truy cập vào tên điều khiển/hành động trong giao diện, nhưng thay vào đó cố gắng làm điều gì đó với họ và đưa kết quả vào chế độ xem:

Bạn không thể làm điều đó trong hàm tạo bởi vì ngữ cảnh chưa được tạo. Bạn cần phải ghi đè phương thức Initialize: (. Lưu ý rằng bạn có thể vượt qua chỉ trong ControllerContext.RouteData đến chức năng của bạn và để cho nó chọn các giá trị cần thiết)

protected override void Initialize(System.Web.Routing.RequestContext requestContext) 
    { 
     base.Initialize(requestContext); 

     //here the routedata is available 
     ViewData["controller_name"] = (ControllerContext.RouteData.Values["Controller"]; 
    } 

1

tôi cần để có được những rất nhiều từ quan điểm, và tôi nhấn nó từ một góc hơi khác nhau - tôi đã viết một vài phương pháp mở rộng để HtmlHelper để cung cấp cho ControllerName hiện tại và ActionName. Một chút dễ dàng hơn để xử lý như bạn không cần phải lo lắng về lặn vào túi ViewData [] hoặc tiêm công cụ ở những nơi thích hợp.

+0

Tôi nghĩ rằng các phương pháp mở rộng như vậy sẽ phù hợp hơn cho UrlHelper, chứ không phải là HtmlHelper. Hai giá trị đó thực sự không liên quan gì đến HTML. –

+0

Điểm tốt - Tôi nghĩ rằng việc triển khai có thể thậm chí đã được tái cấu trúc theo cách đó. Lý thuyết là gần như nhau trong cả hai trường hợp - kéo nó ra ngoài thay vì đẩy nó vào. –

6

Hãy thử điều này:

RouteData.Values.First().Value.ToString() 
+0

Nếu bạn sử dụng định tuyến tùy chỉnh (ví dụ: ngôn ngữ/bộ điều khiển/hành động') 'controller' có thể không phải là mục nhập đầu tiên. –

+0

hãy xem http://stackoverflow.com/a/31749391/4293929 này – MstfAsan

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