【发布时间】:2016-05-15 05:08:22
【问题描述】:
我有一页:Abc.aspx
在这个 Abc.aspx 页面上,我使用了一个母版页,即 Master1.Master。
现在在这个母版页上,我将 1 个用户控件名称呈现为 Usercontrol1.ascx。
在这个用户控件上,我放置了 1 个名为 lbl1 的标签。
<asp:Label runat="server" ID="lbl1"></asp:Label>
所以现在在 Abc.aspx 页面的页面加载事件中,我想找到这个控件,我已经尝试过但得到了 null:
protected void Page_Load(object sender, EventArgs e)
{
var lbl = ((Label)this.Master.FindControl("lbl1")); // null here
((Label)this.Page.Master.FindControl("lbl1")).Text = "Hello"; //error here:object reference not set to instance of object
}
这是我的母版页:
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Master1.Master.cs" Inherits="" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<asp:ContentPlaceHolder ID="head" runat="server"></asp:ContentPlaceHolder>
</head>
<body>
<form runat="server">
<div id="Load">
<uc2:UserControl1 ID="UserControl1 " runat="server" />
<asp:ContentPlaceHolder ID="cphMain" runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
</body>
</html>
【问题讨论】:
-
最好的方法是在您的
MasterPage中提供一个具有有意义名称的属性并输入string。此属性获取/设置UserControl中标签的文本。为了达到这个目标,还要在您的UserControl中提供一个具有相同含义名称的属性并键入string。此属性获取/设置标签的文本。您必须将this.Master转换为MasterPage的实际类型Master1。然后你就可以访问这个自定义属性了。 -
好的,谢谢先生。我已经发布了答案。请你检查一下,让我知道我做对了还是错了?
标签: c# asp.net user-controls master-pages findcontrol