【问题标题】:ASP.NET dynamically insert code into headASP.NET 将代码动态插入头部
【发布时间】:2015-10-02 05:00:13
【问题描述】:

我正在将要包含在常规 Web 表单 (.aspx) 中的 Web 用户控件 (.ascx) 内部工作,但我需要能够从用户控件。在我的 Coldfusion 日子里, 可以解决问题。在 ASP.NET 或类似的 hack 中是否有类似的东西?

【问题讨论】:

  • 下面的答案似乎都依赖于具有 runat="server" 属性的标头,否则 Page.Header 为空。

标签: c# asp.net


【解决方案1】:

要添加 HTML 标记,您可以执行以下操作:

在您的 UserControl 代码中,您可以访问 Page.Header,它本身就是一个控件。然后,您可以向该控件添加新控件:

HtmlGenericControl newControl = new HtmlGenericControl("someTag");
newControl.Attributes["someAttr"] = "some value";
Page.Header.Controls.Add(newControl);

要添加脚本标记,您根本不需要访问 head 标记,因为 ASP.NET 在 ClientScriptManager 上有帮助方法为您工作:

以下是一些代码示例,您也可以将其放入用户控件的代码中:

// Register some inline script:
Page.ClientScript.RegisterClientScriptBlock(GetType(), "myAlertScript", "alert('hello!')", true);

// Register a script reference:
Page.ClientScript.RegisterClientScriptInclude(GetType(), "myLibraryScript", "~/Scripts/MyScriptLibrary.js");

【讨论】:

  • 我正在尝试在文档头部添加一些 Javascript。
【解决方案2】:

我意识到这是一个老问题,但这是另一个例子。

试试这个:

Page.Header.Controls.Add(
    new LiteralControl(
        "<script>alert('Literal Added to <Head>.');</script>"
    )
);

如果您想在 &lt;head&gt; 的特定索引处添加脚本,您可以使用

AddAt(index, new LiteralControl(...)) 其中索引 0 等于 &lt;head&gt; 的顶部

此外,您需要在 head 标签中添加 runat="server",例如&lt;head id="head1" runat="server"&gt;

【讨论】:

    【解决方案3】:
    this.Page.Header.Controls.Add
    

    通过这样做,您将控件添加到头部。您可以添加任何类型的控件。如果您觉得需要添加简单的文本(或者您想手动编写标签),请查看 LiteralControl 类。

    【讨论】:

      【解决方案4】:

      有一些关于使用 C# 代码修改页眉 here 的指导。在页面加载完成之前执行的任何服务器端代码都应该可以正常工作。

      一个简单的例子

      HtmlHead head = Page.Header;
      HtmlTitle title = new HtmlTitle();
      title.Text = "Test Page";
      head.Controls.Add(title);
      

      HTMLHead 引用在命名空间中

      System.Web.UI.HtmlControls
      

      重写自定义控件的 Load() 方法以在服务器端加载父 .aspx 页面时将所需的控件或引用添加到页眉中。

      【讨论】:

        【解决方案5】:

        我有一个简单的解决方案。基于页面的 url(作为键)创建一个运行时内存缓存,其中包含关于 y 的 x 信息(可以是文件引用、脚本文本或生成 JavaScript 的类),并将其数据序列化为 JSON。 Newtonsoft 对任何类的实例都有帮助。事实上,您可以使用它的输出来根据给定的输入初始化一个类的任何新实例。在某种程度上,这意味着您可以自动实例化任何特定类的实例,而不管该实例处于何种用户控制之下。最后,您将创建一个简单的 Web 表单作为脚本参考和最终端点。它提取 JavaScript(或其他什么)并吐出您需要的客户端代码作为 head 标记内的脚本引用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-07-09
          • 1970-01-01
          • 1970-01-01
          • 2013-08-19
          • 1970-01-01
          • 1970-01-01
          • 2023-04-08
          • 2019-09-30
          相关资源
          最近更新 更多