我有一个奇怪的场景,但这就是它在我面前的设计方式。基本上我有userControl,并且有一个child.masterpage
在ascx文件的userControl中,它包含以下内容
<div><%=_template%></div>
child.masterpage继承自parent.masterpage,在child.masterpage中有一个对userControl的调用
<asp:Content><ucc:UserControl></ucc>
parent.masterpage中包含其他字段,并且它有一个带有c#函数的.cs文件
public void passVal(string s)
现在我想要做的是将用户控件中的值直接传递给parent.masterpage函数,以便我可以将它放在我创建的parent.masterpage文字中。
我怎样才能做到这一点(再次,这是现有的设计,我无法扭转局面)我只是添加了一个功能。
<%@ Master Language="C#" AutoEventWireup="true" MasterPageFile="../common/main.master" %>
<%@ Register Src="UserControl.ascx" TagName="Ord" TagPrefix="uc" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" Runat="Server">
<div class="in"><uc:OrderReceipt ID="myord" runat="server" Visible="true"/>
<div style="margin-bottom:30px;">
<a href="~/" id="HomeLink" runat="server" class="BackLink">Back to Home Page</a>
</div>
</asp:Content>
答案 0 :(得分:0)
您可以使用Page.Master
属性来获取主页面实例。
protected someEvent(object sender, EventArgs e)
{
(Page.Master as ChildMaster).passVal("some string");
}
更多答案:
我只是在审核您的OP并实现了一些目标。令我困惑的代码是用户控制。
在ascx文件中的userControl中 包含以下
<div><%=_template%></div>
我没有看到背后的代码,但我的猜测是用户控件只是用于输出动态HTML。我敢打赌,如果你查看用户控件后面的代码(.cs文件),你会发现一个名为_template
的变量。它是一个字符串变量,在运行时使用html进行抽取。
现在,这不能回答你的问题,但是,如果你还不知道...那么知道= P
现在,下一个谜是关于你的子母版页背后缺少代码的问题。
我的理论是,无论是谁做了它都会带来一些错误,导致它不会自动生成文件后面的代码。或者,他们从头开始制作它,只是简单地将它添加到项目中,但忽略了制作代码。
我制作了一个母版页,然后制作了另一个名为child的母版。我能够对它进行子类化,这里的标记和代码就是这样的。
<%@ Master Language="C#" MasterPageFile="~/Master.master" AutoEventWireup="true" CodeFile="Child.master.cs" Inherits="Child" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="body" Runat="Server">
</asp:Content>
public partial class Child : Master
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
在比较你的标记时,这里的关键区别是我明确提到了CodeFile
属性。
创建一个新的cs文件并遵循命名约定。然后将CodeFile
和Inherits
属性添加到您的子母版页面。这应该正确连接所有内容,并允许您开始向子母版页添加方法等。
让我知道你在哪里,我们会从那里拿走它。 GL