Có bộ điều khiển hiện tại trong tầm nhìn


127

Tôi có một View - _Editcuộc sống News M/V/C.

Tôi sử dụng lại V/Mthông qua CategoryControllernhư:

return PartialView("/Views/News/_Edit.cshtml", model);

Làm thế nào từ bên trong View - _Edittôi có thể cảnh báo tên bộ điều khiển?

Khi tôi:

alert('@ViewContext. RouteData.Values["controller"].ToString()');

Giá trị là: News Tuy nhiên, URL là:/Category/foobar

Có cách nào để có được giá trị 'Category'để cảnh báo? cảm ơn


bạn không có NewsController?
thợ săn

Xin vui lòng gửi hành động của bạn methodđược tải partialviewvà những gì controllermethodtồn tại trong.
thợ săn

Câu trả lời:


193

Tôi đã đặt điều này trong quan điểm một phần của tôi:

@HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString()

trong cùng loại tình huống bạn mô tả và nó hiển thị bộ điều khiển được mô tả trong URL (Danh mục cho bạn, Sản phẩm cho tôi), thay vì vị trí thực tế của chế độ xem một phần.

Vì vậy, sử dụng cảnh báo này thay thế:

alert('@HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString()');

25
Câu trả lời dưới đây của Palpie là một phím tắt (dễ nhớ hơn):@ViewContext.RouteData.Values["controller"]
Laoujin

6
Chỉ cần một fyi, bạn không cần phải có được HttpContext.Current. Requestcó sẵn trực tiếp.
Serj Sagan

Có thể lấy tên lớp điều khiển đầy đủ bao gồm không gian tên? Ngoài ra, nó sẽ được mát mẻ để cũng có thể hiển thị tên xem.
Johncl

3
btw, ["action"]hoạt động nếu bạn muốn tên của phương thức hành động.
Zapnologica

117

Tôi làm điều này như thế này, nhưng có lẽ đó chỉ là ASP.NET MVC 4

@ViewContext.RouteData.Values["controller"]

12
Hãy nhớ rằng giải pháp của bạn sẽ trả về bộ điều khiển hiện đang được thực thi. Do đó, nếu trình duyệt đưa ra yêu cầu cho Bộ điều khiển và Bộ điều khiển hiển thị chế độ xem một phần từ Bộ điều khiểnB, thì giải pháp của bạn sẽ trả về tên của Bộ điều khiển, trong khi giải pháp Nicholas Sizer sẽ trả về tên của Bộ điều khiển.
Thomas CG de Vilhena

Nên được chấp nhận là câu trả lời tốt nhất. Điều này vẫn hoạt động trong ASP.NET Core 2.2
Tom

21

Tạo lớp cơ sở cho tất cả các bộ điều khiển và đặt ở đây tên thuộc tính:

public abstract class MyBaseController : Controller
{
    public abstract string Name { get; }
}

Trong tầm nhìn

@{
    var controller = ViewContext.Controller as MyBaseController;
    if (controller != null)
    {
       @controller.Name
    }
}

Ví dụ về bộ điều khiển

 public class SampleController: MyBaseController 
    { 
      public override string Name { get { return "Sample"; } 
    }

Hãy giải thích làm thế nào Nametài sản được thiết lập?
ErikE 3/03/2016

13

Cách khác để có được tên Trình điều khiển hiện tại trong Chế độ xem

@ViewContext.Controller.ValueProvider.GetValue("controller").RawValue

5

Chỉ dùng:

ViewContext.Controller.GetType().Name

Điều này sẽ cung cấp cho bạn toàn bộ Tên của Trình điều khiển


2

Bạn vẫn đang ở trong bối cảnh của mình CategoryControllermặc dù bạn đang tải một PartialViewtừ Views/Newsthư mục của mình .


0

Bạn có thể sử dụng bất kỳ mã nào dưới đây để lấy tên bộ điều khiển

@HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString();

Nếu bạn đang sử dụng MVC 3, bạn có thể sử dụng

@ViewContext.Controller.ValueProvider.GetValue("controller").RawValue
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.