创建一个返回Razor@标记的辅助函数
本文关键字:函数 Razor@ 返回 一个 创建 | 更新日期: 2023-09-27 18:24:43
我很难找到问题的答案,因为我不太确定剃刀标签的"类型"是什么。
从本质上讲,我想创建一个助手,沿着以下路线做一些事情:
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");
我是在这里超越星空,还是这是可能的?
Chris
我不太了解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
扩展方法并没有带来太大的价值。
您可以通过为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");
当函数的结果是纯HTML时,我喜欢使用Razor Helpers。
在您的视图文件中,创建这样的语句:
@helper ScriptTag(string url) {
<script type="text/javascript" src="@Url.Content("~/" + url)"></script>
}
那么用法就像
@ScriptTag("myScript.js")
Razor帮助程序返回中的HTML