如何从用户控件引用母版页内容控件?

发布于 2024-11-29 17:50:14 字数 584 浏览 0 评论 0原文

我有一个用户控件,我想将一些东西“注入”到母版页的头部。我尝试使用以下方法(母版页和用户控制 mmarkup 片段)...

MasterPage:

<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>

用户控制:

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
    <link type="text/css" rel="stylesheet" href="/Shared/Css/Navigation.css" />
</asp:Content>

但这给出了错误:

内容控件必须是内容页面或页面中的顶级控件 引用母版页的嵌套母版页。

那么如何在运行时将控件中的内容放入母版页中呢?

I have a user control in it I want to 'inject' something into the head of a master page. I have tried to use the following approach (master page and user control mmarkup snippets)...

MasterPage:

<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>

User Control:

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
    <link type="text/css" rel="stylesheet" href="/Shared/Css/Navigation.css" />
</asp:Content>

But that gives the error:

Content controls have to be top-level controls in a content page or a
nested master page that references a master page.

So how do I put content into the master page at runtime from a control?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

叫思念不要吵 2024-12-06 17:50:14

你不能。

默认情况下,数据被设计为从主页面流向用户页面,反之亦然。

请参阅以编程方式使用 ASP.NET 母版页母版页的工作原理了解详情。

You can't.

By default data is designed to flow from master to user page, not vice versa.

See Working with ASP.NET Master Pages Programmatically and How Master Pages Work for details.

攒一口袋星星 2024-12-06 17:50:14

您可以通过母版页的公共方法访问母版页内容。因此,如果我从您的问题中获取示例,您可以通过对代码进行以下修改,从用户控件或页面中设置母版页中链接的 href:

将链接引入母版页中的“正常内容”并给他一个id 以便您可以从代码隐藏中访问它。

<link id="link" type="text/css" rel="stylesheet" />

向设置 href 的母版页添加一个属性。

public string LinksHref
{
     get { return link.Href; }
     set { link.Href = value; }
}

如果您想从页面访问它,您可以添加 MasterType 指令。

<%@ MasterType VirtualPath="~/Site.Master" %>

更改后面控件代码中的属性。

Master.LinksHref = "/Shared/Css/Navigation.css";

如果您想从用户控件访问它,则不能使用 MasterType 指令,而必须自己进行转换:

((MasterPageClassName)Page.master).LinksHref= "/Shared/Css/Navigation.css";

You can access a master pages content through public methods of the master page. So if I take the example from your question, you can set the link's href in the master page from your user control or page with the following modification of your code:

Introduce the link as "normal content" in the master page and give him an id so that you can access it from code behind.

<link id="link" type="text/css" rel="stylesheet" />

Add a property to the master page that set's the href.

public string LinksHref
{
     get { return link.Href; }
     set { link.Href = value; }
}

If you want to access this from a page you can add a MasterType directive.

<%@ MasterType VirtualPath="~/Site.Master" %>

Change the property in the controls code behind.

Master.LinksHref = "/Shared/Css/Navigation.css";

If you want to access this from a user control, you can't use the MasterType directive and have to do the casting by yourself:

((MasterPageClassName)Page.master).LinksHref= "/Shared/Css/Navigation.css";
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文