在视图中获取控制器的操作名称

19

在MVC3中,获取返回View的Action名称的正确方法是什么?

我正在使用ViewContext.Controller.ValueProvider.GetValue("action").RawValue来返回创建View的Action(Method)的名称,并将其在Partial View中返回,Partial View包含在Action返回的View中。

对于Index,它可以正常工作,但是,当我尝试将其用于另一个方法名称时,它总是评估为false。

在立即窗口中,我得到以下结果:

ViewContext.Controller.ValueProvider.GetValue("action").RawValue
"Edit"

ViewContext.Controller.ValueProvider.GetValue("action").RawValue == "Edit"
false

这非常令人困惑,因为第一个语句的评估结果是一个值为“Edit”的字符串,但将其与字符串“Edit”进行比较将返回false?

很奇怪...

1个回答

56

RawValue 是一个 object,所以 RawValue == "..." 调用的是 Object.op_Equality,它通过引用比较而非值比较。

调用 ViewContext.RouteData.GetRequiredString("action")


谢谢,但是这会返回`RequestContext.RouteData.GetRequiredString("action")。需要一个对象引用来访问非静态字段、方法或属性'System.Web.Routing.RequestContext.RouteData.get'。 - Darbio
我使用以下代码以通用方式将页面链接到自身: @Url.Action( ViewContext.RouteData.GetRequiredString("action"), ViewContext.RouteData.GetRequiredString("controller") ) - Tim Schimandle
@Ceekay:只需使用 Request.Url - SLaks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接