我有多个页面
<%@ Page Language="C#" AutoEventWireup="True" CodeBehind="MyPage.aspx.cs" Inherits="MyPage " MasterPageFile="~/Site.master" %>
<asp:Content ContentPlaceHolderID="commonForm" runat="server">
<asp:Table runat="server">
<asp:TableRow>
<asp:TableCell ID="cellControl" />
</asp:TableRow>
</asp:Table>
</asp:Content>
public partial class MyPage : MySuperPage { }
和他们的超级课程:
public abstract class MySuperPage : Page
{
public MySuperPage()
{
this.Load += new EventHandler(PageLoad);
}
// my own method
protected void PageLoad(object sender, EventArgs e)
{
var c = this.FindControl("cellControl"); // null!
}
// auto event handling
protected void Page_Load(object sender, EventArgs e)
{
var c = this.FindControl("cellControl"); // null!
}
}
为什么这两种方法都找不到这种控制?
答案 0 :(得分:1)
我见过的最常见的解决方案是在控制树下进行递归下降,直到找到具有所需ID的控件,例如: https://blog.codinghorror.com/recursive-pagefindcontrol/
答案 1 :(得分:0)
在我看来,你试图在页面控件集合中找到控件有什么问题。您必须在Table控件中搜索表格单元格。
UPD。如果您使用母版页,则可以直接从页面访问其控件。首先,您必须声明主类型:
<%@ MasterType VirtualPath="~/MasterPage.master" %>
然后声明公共属性(也可以是一些控件):
public string MyTitle
{
get { return "BaseMaster Title"; }
}
然后你就可以写:
string text = Master.MyTitle;
或
Master.FindControl('Table1');