我正在尝试将文本传递给Literal,parent.master包含ContentTemplateID,而Child.master包含contentID,其中一个是form的文字
<asp:Literal runat="server" ID="myLiteral"></Literal>
我试图从像这样的UserControl.cs文件中传递它
gooleTrackin = track.GetTrack(track.OrderType.YAHOO);
Literal mpLiteral = (Literal)this.Parent.Page.Master.FindControl("myLiteral");
mpLiteral.Text = gooleTrackin.ToString(); //nullReference here
但它在最后一行给了我NulLReference。
顺便说一下,我无法访问母版页的.cs文件,必须通过UserControl来完成。
谢谢
其他代码(此处位于CHILD.MASTER中)
<%@ Master Language="C#" AutoEventWireup="true" MasterPageFile="../common/child.master" %>
<%@ Register Src="UserControl.ascx" TagName="UserControl" TagPrefix="uc1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" Runat="Server">
<div class="inner"><uc1:UserControl ID="theRceipt" runat="server" Visible="true"/>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="BottomContentTemplate" Runat="Server">
<div style="margin-bottom:30px;">
<asp:Literal ID="myLiteral" runat="server"></asp:Literal>
<a href="~/" id="23" runat="server" class="BackLink">Back to Home Page</a>
</div>
</asp:Content>
答案 0 :(得分:1)
使用母版页时,母版页中的控件将合并到页面的控件层次结构中,因此在查找控件时可能会出现问题。我建议您尝试关注并查看它是否有效:
Literal mpLiteral = (Literal)this.Page.FindControl("myLiteral");
OR
Literal mpLiteral = (Literal)this.Parent.FindControl("myLiteral");
否则,您可能需要尝试递归查找 - 请参阅http://www.west-wind.com/weblog/posts/2006/Apr/09/ASPNET-20-MasterPages-and-FindControl
但是,我宁愿推荐一种替代方法 - 假设您已在Child.Master中定义了文字控件,并且Child
是master后面的代码名称,您可以在其中添加辅助方法如
public void UpdateMyLiteral(string text)
{
myLiteral.Text = text;
}
在用户控制代码中,调用辅助方法,如
((Child)this.Page.Master).UpdateMyLiteral("xyz");
请注意,我们正在将master转换为其代码隐藏类。