Asp.net mvc 3 Html帮助程序正在视图引擎后运行

Asp.net mvc 3 Html帮助程序正在视图引擎后运行,asp.net-mvc-3,razor,html-helper,Asp.net Mvc 3,Razor,Html Helper,我正在使用ASP.NETMVC3和Razor引擎 我有一个html助手,它将返回@Url.Action。我遇到的问题是@Url.Action没有被转换成正确的Url。相反,@Url.Action作为html的一部分返回 看起来razor引擎在运行,然后html助手在事后运行?我觉得这有点倒退。有什么我可以更改的,以便我的助手首先运行吗 以下是一个例子: public static HtmlString Test(this HtmlHelper helper) { return new

我正在使用ASP.NETMVC3和Razor引擎


我有一个html助手,它将返回@Url.Action。我遇到的问题是@Url.Action没有被转换成正确的Url。相反,@Url.Action作为html的一部分返回

看起来razor引擎在运行,然后html助手在事后运行?我觉得这有点倒退。有什么我可以更改的,以便我的助手首先运行吗

以下是一个例子:

public static HtmlString Test(this HtmlHelper helper)
{ 
    return new HtmlString("@Url.Action('Logoff', 'Login'");
}
在my_Layout.cshtml中,我有这个

@Html.Test()

html将显示为@Url.Action('Logoff','Login')

它返回一个字符串,因为Url周围有引号。Action-删除引号和@,它应该得到评估。

扩展
UrlHelper
在处理Url时似乎更合适、更自然:

public static string Test(this UrlHelper helper)
{
    return helper.Action("Logoff", "Login");
}
在你看来:

@Url.Test()

您引用了
url.action
命令,并将其转换为文字字符串

另外,
@
的使用是razor语法,在模型/控制器文件中不起作用

使用


未转换为正确的url。它到底转换成什么?编码字符串?@Url.Action作为html的一部分返回。你能从你的助手那里发布一些代码吗,以及如何从视图中调用它?显然我的示例太简单了。我实际上是想返回一个URL列表。不只是一个。最后,我真正想要的是基于我已经拥有的一个站点地图文件的动态菜单,其中包含了一些角色检查。等等,回到我最初的观点。HtmlHelpers似乎无法返回Razor代码。相反,他们必须自己做这些工作才能得到真正的html。是这样吗?我们正在制作菜单。我只举了一个简短的例子。@ShaneC,我不太明白你到底想要什么。您想在发送到浏览器的最终生成的HTML中以
/Login/Logoff
@Url.Action('Logoff','Login')
结束吗?我想查看/Login/Logoff,但它更像
  • ,因为我不只是试图返回Url。我正在尝试创建一个菜单,其中将嵌入一组URL。@ShaneC,太好了,那么我的答案应该会为您指明正确的方向。如果需要锚定,请扩展
    HtmlHelper
    ,并返回
    helper.ActionLink
    。请参阅我的评论更新。我想要一根大绳子。不仅仅是一个URL,我们还返回将被注入Razor视图的代码。因此,即使这样,我们也不需要剃刀的@Shane,您将需要
    @html.Test()
    视图代码中的
    @
    语法。看看@替换了什么。它只是一个符号,表示代码遵循。在您的控制器和模型中,您始终处于代码模式。很抱歉,我没有注意到您正在使用实际的帮助程序进行生成。这似乎是正确的方向。
    public static HtmlString Test(this HtmlHelper helper)
    { 
        return new HtmlString( helper.Action('Logoff', 'Login') );
    }