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

Jud*_*dyJ 5 asp.net-mvc

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

<script src="@Url.Content("~/Scripts/small_script_block1.js")" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

谢谢

Cod*_*ing 6

另一种可能性需要我多花几分钟才能写出来:

为HtmlHelper创建扩展方法.在你的cshtml文件中,它看起来像这样:

@Html.InlineScriptBlock("~/scripts/small_script_block1.js")
Run Code Online (Sandbox Code Playgroud)

如果您愿意,我可以向您发送实施,但这个想法可能就是您所需要的.如果没有,请添加评论,我会写出来.

编辑代码下面(不漂亮,没有暗示或给出的保证:)

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

请记住,如果将其放入项目中,则需要使命名空间对视图可见.与可以在顶部提供标记的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>
Run Code Online (Sandbox Code Playgroud)


Leo*_*ons 5

您可以使用@RenderSection语法.

<head>
    @RenderSection( "JavaScript", optional : true)
</head>
Run Code Online (Sandbox Code Playgroud)

在身体的某个地方,添加..

@section JavaScript
{
    <script src="/Scripts/script.js" type="text/javascript"></script>
}
Run Code Online (Sandbox Code Playgroud)

编辑:或者如果你更喜欢内联,那么如下:

@section JavaScript
{
    <script type="text/javascript">
    function doSomething() {
    }
    </script>
}
Run Code Online (Sandbox Code Playgroud)