在@helper声明中完成@Url Helper

时间:2011-08-01 21:10:36

标签: asp.net-mvc-3 razor

有没有办法在@Url声明中访问完整的@helper辅助对象?

我想做这样的事......

@helper Button(System.Web.Mvc.ActionResult action, string text)
{
    <input type="button" name="btn" value="@text" onclick="windows.location='@Url.Action(action)'" />
}

我找到this question,但此解决方案无法让您访问@Url.Action(ActionResult)。请注意我正在寻找的具体超载。

那么有没有人想出这个解决方案?我总是可以为自定义帮助程序执行扩展方法样式,但我喜欢@helper样式,我已经遇到过几次这个问题了。

先谢谢大家!

2 个答案:

答案 0 :(得分:3)

  

有没有办法在@helper声明中访问完整的@Url帮助器对象?

是的,将它作为参数传递给辅助方法。

@helper Button(string action, string text, UrlHelper url)
{
    <input type="button" name="btn" value="@text" onclick="windows.location='@url.Action(action)'" />
}

当您从某个视图调用帮助程序时:

@Button("someAction", "some text", Url)

答案 1 :(得分:0)

我不太了解剃刀,但对于HTML助手是的,你可以。使用帮助器的RequestContext,如下所示。这是我为ImageFor html helper写的一个例子:

    public static HtmlString ImageFor(this HtmlHelper helper, string url ) 
    {
        var urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
        TagBuilder tb = new TagBuilder("img");
        tb.MergeAttribute("src", urlHelper.Content(url));
        return new HtmlString(tb.ToString(TagRenderMode.SelfClosing)); 
    }