2012-02-16 3 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"); 

Могу ли я достичь за звездами здесь или же это возможно?

Chris

ответ

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 на самом деле не означает иметь эту строку ресурса. Строка ресурса предназначена для использования только в функции «Ресурс». Таким образом вы можете отображать несколько типов ресурсов, используя функцию «Ресурс». Я обновлю вопрос, чтобы удалить свою ошибку. – Chris

+0

Спасибо за вашу помощь еще раз! – Chris

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

Бритва Помощники возвращают HTML в

Смежные вопросы