asp.net-mvc - 我的 Razor 文件中的内联 javascript - 我可以从外部文件获取此 "included"

标签 asp.net-mvc

我的 JavaScript block 很小。我希望这些相同的 block 内联显示在我的代码中,但不想在每个文件中重复它们。有没有一种方法可以将不涉及的代码“包含”到 Razor 文件中

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

谢谢

最佳答案

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

为 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());
    }
}

请记住,如果将其放入项目中,则需要使命名空间对 View 可见。与 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>

关于asp.net-mvc - 我的 Razor 文件中的内联 javascript - 我可以从外部文件获取此 "included",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5925679/

相关文章:

c# - Entity Framework 在分配给嵌套列表成员时复制查找值

c# - 使用 IEnumerable<Interface> 类型参数发布到 Web API 操作

c# - 我不能在此处将我的 ADO.NET 实体模型实例包装在 using 语句中吗?

wpf - DataAnnotations 元数据类型不工作

asp.net-mvc - 在 ASP.NET MVC 中使用 View 模型 + 数据模型来支持类型化 View ?

.net - 如何在 MVC3 Controller 中处理存储库对象

c# - 如何解决 Entity Framework 提供程序异常

c# - 如何将源类型 'System.Nullable<bool>' 转换为目标类型 'bool'

asp.net-mvc - ASP.NET MVC 3 最佳实践/设计

c# - 如何将 ViewModel 属性作为模型传递给局部 View ?