从UserControl到父母版页面

时间:2011-06-28 23:06:01

标签: c# asp.net

我有一个奇怪的场景,但这就是它在我面前的设计方式。基本上我有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>

1 个答案:

答案 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文件并遵循命名约定。然后将CodeFileInherits属性添加到您的子母版页面。这应该正确连接所有内容,并允许您开始向子母版页添加方法等。

让我知道你在哪里,我们会从那里拿走它。 GL