2012-02-16 12 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)の2番目のパラメータの使用方法が表示されません。ヘルパーはScriptTagと呼ばれているので、スクリプトをレンダリングすることは非常に明白です。

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

をしかし、いずれにせよ、あなたがそのような構文を必要に応じて、あなたがRazor Templated Delegates使用できます:私たちはResource拡張子を見ることができるように

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; 
    } 
} 

をあなたが直接することができたときにも、なぜあなたはそのようなものを2ネストされたヘルパーが必要なのかこの場合のメソッドはあまり価値がありません。

+0

内のHTMLを返す

@ScriptTag("myScript.js") 

のように、その後の使用がありますそのリソース文字列を持つこと。リソース文字列は、リソース関数でのみ使用されます。これにより、リソース関数を使用して複数のリソースタイプをレンダリングできます。私は間違いを解消するために質問を更新します。 – Chris

+0

もう一度お世話になりました。 – Chris

0

これを解決するには、HtmlHelperタイプの拡張メソッドを作成します。例えば

次のようにあなたは、あなたのカスタムHTMLヘルパーメソッドを使用することができます

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.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が実際のものではありません

関連する問題