簡體   English   中英

創建一個返回Razor @標簽的輔助函數?

[英]Create a helper function that returns Razor @ tags?

我不確定如何找到剃刀標簽的答案,因此一直在努力尋找答案。

從本質上講,我想創建一個可以按照以下方式執行操作的助手:

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

我想這樣做的原因是,我實現了在概述的擴展方法這個帖子

基本上不必做:

@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");

我是在這里超越星空還是可能?

克里斯

我在您的ScriptTag幫助器( js )中看不到第二個參數的用法。 該幫助程序稱為ScriptTag,因此很明顯它將渲染腳本。 另外,當您可以直接擁有以下內容時,為什么需要這樣的兩個嵌套幫助器:

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

但是無論如何,如果您需要這樣的語法,則可以使用Razor模板化委托

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擴展方法並沒有帶來太大的價值。

當函數的結果為純HTML時,我喜歡使用Razor Helpers

在您的視圖文件中,創建如下語句:

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

然后用法就像

@ScriptTag("myScript.js")

剃刀助手會在

您可以通過為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");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM