我的Razor文件中的内联javascript - 我可以从外部文件中“包含”此内容

时间:2011-05-08 04:51:53

标签: asp.net-mvc

我有小块的javascript块。我希望这些相同的块在我的代码中显示为内联,但不希望在每个文件中重复它们。有没有办法可以将代码“包含”到不涉及

的Razor文件中
<script src="@Url.Content("~/Scripts/small_script_block1.js")" type="text/javascript"></script>

由于

3 个答案:

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

创建部分视图并粘贴到代码中。