【问题标题】:Complete @Url Helper in @helper declaration在@helper 声明中完成@Url Helper
【发布时间】:2011-10-17 18:49:59
【问题描述】:

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

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

@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 样式,我已经遇到过几次这个问题。

提前谢谢大家!

【问题讨论】:

    标签: asp.net-mvc-3 razor


    【解决方案1】:

    有没有办法在@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)
    

    【讨论】:

    • 好主意,但它不起作用,或者我做错了什么。我尝试了以下操作方法,我得到的唯一重载是将操作名称作为字符串的方法...@helper ActionButton(System.Web.Mvc.ActionResult action, string text, System.Web.Mvc.UrlHelper url) { &lt;input type="button" name="@action.ToString()" value="@text" onclick="window.locaiton='@url.Action(action)'" /&gt; }
    • @jrizzo,Action 方法的哪些重载不采用您正在谈论的字符串? UrlHelper.Action 方法没有重载,它将System.Web.Mvc.ActionResult 作为我知道的第一个参数。你一定是在试错。
    • 我正在寻找采用ActionResult 的重载。
    • @jrizzo,????????????恐怕您正在寻找的超载根本不存在。看看文档:msdn.microsoft.com/en-us/library/…
    • 嗯...我找不到文档,但如果我在常规 .cshtml 页面中键入 @Url.Action(myActionResult),Intellisense 中的 first 重载需要 @987654328 @。也许它是我的包裹的一部分...如果我弄清楚它是哪一个,我会回复你(或者如果其他人知道,请告诉我......)。
    【解决方案2】:

    我不确定 Razor,但对于 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)); 
        }
    

    【讨论】:

      猜你喜欢
      • 2019-02-08
      • 2012-06-05
      • 1970-01-01
      • 2011-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-23
      相关资源
      最近更新 更多