空参考文字控制

时间:2011-06-29 02:23:31

标签: c# asp.net nullreferenceexception

我正在尝试将文本传递给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>

1 个答案:

答案 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转换为其代码隐藏类。