【问题标题】:Create a helper function that returns Razor @ tags?创建一个返回 Razor @ 标签的辅助函数?
【发布时间】:2012-03-07 15:30:59
【问题描述】:

努力寻找我的问题的答案,因为我不确定剃须刀标签是什么“类型”。

本质上,我想创建一个帮助器来执行以下操作:

public static xxxxxxx ScriptTag(this HtmlHelper htmlHelper, string url)
{
      return @<script type="text/javascript" src="@Url.Content("~/" + url)" />;
}

我想要这个的原因是我正在实现this post 中概述的扩展方法。

基本上不用做:

@Html.Resource(@<script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>, "js")`

我希望能够做到:

@Html.Resource(Html.ScriptTag("Scripts/jquery-1.4.4.min.js"), "js");

我是在这里超越星星还是有可能?

克里斯

【问题讨论】:

    标签: c# asp.net asp.net-mvc-3 razor extension-methods


    【解决方案1】:

    我不太了解您的 ScriptTag 助手 (js) 中第二个参数的用法。该帮助程序称为 ScriptTag,因此很明显它将呈现一个脚本。另外,当您可以直接拥有时,为什么还需要像这样的 2 个嵌套助手:

    @Html.Resource("Scripts/jquery-1.4.4.min.js", "js")
    

    但无论如何,如果你需要这样的语法,你可以使用Razor Templated Delegates:

    public static class HtmlExtensions
    {
        public static HelperResult ScriptTag(this HtmlHelper htmlHelper, string url, string type)
        {
            var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
            var script = new TagBuilder("script");
            script.Attributes["type"] = "text/javascript";
            script.Attributes["src"] = urlHelper.Content("~/" + url);
            return new HelperResult(writer =>
            {
                writer.Write(script.ToString(TagRenderMode.Normal));
            });
        }
    
        public static IHtmlString Resource(this HtmlHelper htmlHelper, HelperResult renderer)
        {
            return renderer;
        }
    }
    

    正如我们所见,Resource 扩展方法在这种情况下并没有带来太多价值。

    【讨论】:

    • ScriptTag 实际上并不意味着拥有该资源字符串。资源字符串仅用于 Resource 函数。这样,您可以使用 Resource 函数呈现多种资源类型。我会更新问题以消除我的错误。
    • 再次感谢您的帮助!
    【解决方案2】:

    您可以通过为 HtmlHelper 类型创建扩展方法来解决此问题。

    例如:

    public static MvcHtmlString ScriptTag(this HtmlHelper htmlHelper, string contentPath,
        string scriptType)
    {
        var httpContext = htmlHelper.ViewContext.HttpContext;
    
        var scriptTag = String.Format("<script src=\"{0}\" type=\"{1}\"></script>",
            UrlHelper.GenerateContentUrl(contentPath, httpContext),
            scriptType);
    
        return new MvcHtmlString(scriptTag);
    }
    

    然后您可以按如下方式使用您的自定义 Html 辅助方法:

    @Html.ScriptTag("Scripts/jquery1.6.1.min.js", "javascript/text");
    

    【讨论】:

      【解决方案3】:

      当函数的结果是纯 HTML 时,我喜欢使用Razor Helpers

      在您的视图文件中,创建如下语句:

      @helper ScriptTag(string url) {
          <script type="text/javascript" src="@Url.Content("~/" + url)"></script>
      }
      

      那么用法是这样的

      @ScriptTag("myScript.js")
      

      Razor Helpers 在

      中返回 HTML

      【讨论】:

        猜你喜欢
        • 2022-01-08
        • 1970-01-01
        • 1970-01-01
        • 2019-08-02
        • 2017-03-27
        • 2016-01-20
        • 2011-06-16
        • 2015-03-08
        • 1970-01-01
        相关资源
        最近更新 更多