【问题标题】:Adding a script reference to the html head tag from a partial view从局部视图中添加对 html 头标记的脚本引用
【发布时间】:2009-11-20 03:21:56
【问题描述】:

如何注入脚本标签如

<script src="somejsfile"></script>

<script type="text/javascript>some javascript</script>

从局部视图进入页面的头部标签?


更新:回答旧问题 这是关于 ASP.NET MVC 的。我们可以使用 RenderSection。这里是使用 Razor 视图引擎的 MVC 3 示例:

布局视图或母版页:

<html>
  <head>
  <script ...></script>
  <link .../>
  @RenderSection("head")
  </head>
  <body>
  ...
  @RenderBody()
  ...
  </body>
</html>

查看,例如主页:

@section head{
  <!-- Here is what you can inject the header -->
  <script ...></script>
  @MyClass.GenerateMoreScript()
}
<!-- Here is your home html where the @RenderBody() located in the layout. -->

【问题讨论】:

  • 你可以在页面中加入
  • 我意识到它并不一定必须放在那里,但如果我愿意的话,我正在寻找一种好的方法。
  • @vakman - 我的回答满足您的需求吗?

标签: asp.net-mvc partial-views


【解决方案1】:

即使 THX 的答案有效,它也不是一个好的答案,因为 MVC 的意图是本质上是无状态的。此外,他的解决方案不允许您将脚本放置在它们应该去的地方 - 大多数网站都希望它们的脚本声明位于页面底部的 &lt;/body&gt; 标记之前,因为它最有利于性能和搜索引擎优化。

有答案了,感谢Darin Dimitrov

Using sections in Editor/Display templates

他的回答允许您从布局视图中的部分视图注册脚本。

需要注意的是,他的答案是使用字典对象中的 GUID 标记项目,因此无法保证脚本将按照它们在部分视图中列出的顺序呈现在母版页中。

有两种解决方法:

  1. 从局部视图中仅注册 1 个脚本-或-
  2. 更改他的 HTML Helper 实现以支持排序

我正在尝试自己处理后者。

祝你好运。

【讨论】:

    【解决方案2】:

    部分视图为UserControls。不能用ClientScriptManagerRegisterClientScriptInclude方法吗?

    protected override void OnLoad(EventArgs e) {
        base.OnLoad(e);
        Page.ClientScript.RegisterClientScriptInclude("some key", "http://website/javascript.js");
    }
    

    【讨论】:

    • 这适用于 ASP.NET WebForms,但不适用于 MVC。
    • 这将在 MVC 中处理视图时工作,但它不会在部分视图中工作,因为现在可以继承母版页。
    • 您的编辑绝对是一种 Web 表单方法,在 MVC 中不起作用。
    • MVC 建立在 ASP.NET 之上,因此Page_Load 事件和Page.ClientScript 的行为与“Web 窗体”应用程序中的行为相同。我刚试过。尽管RegisterClientScriptInclude
    • HTML 4.0 18.2.1 :“SCRIPT 元素将脚本放置在文档中。此元素可以在 HTML 文档的 HEAD 或 BODY 中出现任意次数。”所以是的,正文中的脚本没问题。
    猜你喜欢
    • 2015-09-26
    • 2011-05-11
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    相关资源
    最近更新 更多