2

我有很多页

<%@ 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!
    }
}

为什么两种方法都找不到这个控件?

4

2 回答 2

1

我见过的最常见的解决方案是沿着控制树递归下降,直到找到具有所需 ID 的控件,例如https://blog.codinghorror.com/recursive-pagefindcontrol/

于 2010-02-12T22:56:12.947 回答
0

在我看来,您正试图在 Page 控件集合中找到控件出了什么问题。您必须在表格控件中搜索表格单元格。

更新。如果您使用母版页,您可以直接从页面访问其控件。首先你必须声明主类型:

<%@ MasterType VirtualPath="~/MasterPage.master" %>

然后声明公共财产(也可以是一些控制):

public string MyTitle
{
    get { return "BaseMaster Title"; }
}

然后你就可以写:

string text = Master.MyTitle;

或者

Master.FindControl('Table1');
于 2010-02-12T10:02:11.793 回答