我有小块的javascript块。我希望这些相同的块在我的代码中显示为内联,但不希望在每个文件中重复它们。有没有办法可以将代码“包含”到不涉及
的Razor文件中<script src="@Url.Content("~/Scripts/small_script_block1.js")" type="text/javascript"></script>
由于
答案 0 :(得分:5)
您可以使用@RenderSection语法。
<head>
@RenderSection( "JavaScript", optional : true)
</head>
身体某处,添加..
@section JavaScript
{
<script src="/Scripts/script.js" type="text/javascript"></script>
}
编辑: 或者如果你更喜欢内联,那么如下:
@section JavaScript
{
<script type="text/javascript">
function doSomething() {
}
</script>
}
答案 1 :(得分:5)
另一种可能性需要我多花几分钟才能写出来:
为HtmlHelper创建扩展方法。在你的cshtml文件中,它看起来像这样:
@Html.InlineScriptBlock("~/scripts/small_script_block1.js")
如果您愿意我可以向您发送实施,但这个想法可能就是您所需要的。如果没有,请添加评论,我会写下来。
编辑代码下面(不是很漂亮,也没有暗示或给出的保证:)
public static class HtmlHelperExtensions
{
public static MvcHtmlString InlineScriptBlock<TModel>(this HtmlHelper<TModel> htmlHelper, string path)
{
var builder = new TagBuilder("script");
builder.Attributes.Add("type", "text/javascript");
var physicalPath = htmlHelper.ViewContext.RequestContext.HttpContext.Server.MapPath(path);
if (File.Exists(physicalPath))
{
builder.InnerHtml = File.ReadAllText(physicalPath);
}
return MvcHtmlString.Create(builder.ToString());
}
}
请记住,如果将其放入项目中,则需要使命名空间对视图可见。与可以在顶部提供标记的ASP.NET WebForms不同,Razor要求您在Views文件夹中的Web.config文件中执行此操作。
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="Your.Namespace.Here.Extensions" />
</namespaces>
</pages>
答案 2 :(得分:3)
@RenderPage("_IncludeYourScriptsHere.cshtml")
创建部分视图并粘贴到代码中。