Get current controller in view

2019-01-13 00:43发布

问题:

I have a View - _Edit which lives in News M/V/C.

I reuse the V/M via the CategoryController as:

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

How from within the View - _Edit can I alert the controller name?

When I:

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

The Value is: News However, the URL is: /Category/foobar

Is there a way to get the value 'Category' to alert? thanks

回答1:

I have put this in my partial view:

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

in the same kind of situation you describe, and it shows the controller described in the URL (Category for you, Product for me), instead of the actual location of the partial view.

So use this alert instead:

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


回答2:

I do it like this, but perhaps it's only ASP.NET MVC 4

@ViewContext.RouteData.Values["controller"]


回答3:

Create base class for all controllers and put here name attribute:

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

In view

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

Controller example

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


回答4:

Other way to get current Controller name in View

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


回答5:

You are still in the context of your CategoryController even though you're loading a PartialView from your Views/News folder.



回答6:

Just use:

ViewContext.Controller.GetType().Name

This will give you the whole Controller's Name



回答7:

You can use any of the below code to get the controller name

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

If you are using MVC 3 you can use @ViewContext.Controller.ValueProvider.GetValue("controller").RawValue