有没有办法在@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样式,我已经遇到过几次这个问题了。
先谢谢大家!
答案 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));
}