2012-02-16 45 views
2

努力尋找我的問題的答案,因爲我不完全確定'輸入'剃鬚刀標籤是什麼。創建一個返回Razor @標籤的幫助函數?

基本上我想創建一個幫手,做的東西沿着這些路線:

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

上午我到達這裏以後的星星或者是這可能嗎?

克里斯

回答

4

我不太看的第二個參數的使用在你的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擴展方法在這種情況下不會帶來太多的價值。

+0

ScriptTag其實並不意味着內返回HTML擁有該資源字符串。資源字符串僅用於資源功能。這樣你可以使用Resource函數渲染多種資源類型。我會更新問題以消除我的錯誤。 – Chris 2012-02-16 09:27:35

+0

再次感謝您的幫助順便說一句! – Chris 2012-02-16 09:28:25

0

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

當一個函數的結果是純HTML,我喜歡用Razor Helpers

在您的視圖文件,創建一個這樣的語句:

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

然後使用像

@ScriptTag("myScript.js") 

剃刀傭工