从剃刀获取控制器名称

时间:2014-10-17 00:03:55

标签: c# asp.net-mvc razor asp.net-mvc-5

我似乎很难得到一些应该很容易的东西。在我看来,使用Razor,我想得到当前控制器的名称。例如,如果我在这里:

http://www.example.com/MyController/Index

如何从Razor表达式中获取控制器名称MyController

@* Obviously this next line doesn't work
    @Controller.Name
*@

我是MVC的新手,所以如果这是一个明显的答案,请不要攻击我。

6 个答案:

答案 0 :(得分:71)

@{ 
    var controllerName = this.ViewContext.RouteData.Values["controller"].ToString();
}

OR

@{ 
    var controllerName = HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString();
}

答案 1 :(得分:33)

Koti Panga答案的附录:他提供的两个例子是等同。

这将返回处理执行此代码的视图的控制器的名称:

var requestedController = HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString();

这将返回URL中请求的控制器的名称:

SiteMenuPartial

虽然在大多数情况下这些肯定是相同的,但在某些情况下,您可能会在属于不同控制器的局部视图中,并希望获得控制器的名称"更高级别"在链中,在这种情况下需要第二种方法。

例如,假设您有一个部分视图负责呈现网站的菜单链接。因此,对于您网站中的每个网页,都会准备链接,并通过LayoutController中名为/Home/Index的操作传递给视图。

因此,当您加载SiteMenuPartial时,将检索布局页面,布局页面将调用SiteMenuPartial.cshtml方法,并返回/* Executes at the top of SiteMenuPartial.cshtml */ @{ // returns "Layout" string handlingController = this.ViewContext.RouteData.Values["controller"].ToString(); // returns "Home" string requestedController = HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString(); } 局部视图。如果在该局部视图中,您要执行以下两行代码,则它们将返回显示的值:

Sub Compare()
Dim Dic As Object
Dim fso As Object
Dim fldStart As Object
Dim fl As Object
Dim Mask As String, i As Long
Dim Wbk As Worksheet, w1 As Worksheet


Set fso = CreateObject("scripting.FileSystemObject")
Set fld = fso.GetFolder("C:\Users\kelvinwong\Desktop\Survey Testing")
Set w1 = Workbooks("Book1.xlsm").Sheets("Sheet1")

Set Dic = CreateObject("Scripting.Dictionary")

Mask = "*.xlsx"


For Each fl In fld.Files
    If fl.Name Like Mask Then
        Set Wbk = Workbooks.Open(fld & "\" & fl.Name).Sheets("Sheet1")
        i = Wbk.Cells.SpecialCells(xlCellTypeLastCell).Row
        For Each oCell In Wbk.Range("A2:A" & i)
            If Not Dic.exists(oCell.Value) Then
                Dic.Add oCell.Value, oCell.Offset(, 0).Value
            End If

        Next oCell

     End If

Next fl
i = w1.Cells.SpecialCells(xlCellTypeLastCell).Row
    For Each oCell In w1.Range("A2:A" & i)
        For Each key In Dic
            If oCell.Value = key Then
                oCell.Offset(, 2).Value = Dic(key)
        End If

        Next
    Next
End Sub

答案 2 :(得分:6)

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

MVC 3

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

MVC 4.5

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

答案 3 :(得分:3)

无需ToString()来电使用

@ViewContext.RouteData.GetRequiredString("controller")

答案 4 :(得分:1)

此外,如果您想获得完整控制器的名称(“Controller”结尾),您可以使用:

ViewContext.Controller.GetType().Name

答案 5 :(得分:-4)

@ ViewContext.RouteData.Values ["控制器&#34]的ToString();