ASP.NET通过ID查找控件

Ped*_*sta 0 c# asp.net

我正在使用asp.net做一个简单的网站,并且在c#中的代码后按ID查找我或我的对象时遇到麻烦。我有这样的事情:

<asp:ListView ID="InternamentosListView" runat="server"
            DataSourceID="InternamentosBD">
        <LayoutTemplate>
            <table id="camas">

                    <asp:PlaceHolder runat="server" ID="TablePlaceHolder"></asp:PlaceHolder>

            </table>

        </LayoutTemplate>
Run Code Online (Sandbox Code Playgroud)

其余的都无关紧要,然后我在后面的代码中使用它:

Table table = (Table)FindControl("camas");
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

Table table = (Table)camas;
Run Code Online (Sandbox Code Playgroud)

Control table= (Table)FindControl("camas");
Run Code Online (Sandbox Code Playgroud)

每行都给我Null。难道我做错了什么 ?

编辑:从您的答案我做到了:

<LayoutTemplate>

            <table id="camas" runat="server">


            </table>

        </LayoutTemplate>
Run Code Online (Sandbox Code Playgroud)

并尝试了上述所有内容。同样的结果。

EDIT2:完整代码:

C#

 protected void Page_Load(object sender, EventArgs e)
    {

        Table table = (Table)FindControl("camas");
        HiddenField NCamasHF = (HiddenField)FindControl("NCamas");
        int NCamas = Convert.ToInt32(NCamasHF);
        HiddenField NColunasHF = (HiddenField)FindControl("NColunas");
        HiddenField CorMasc = (HiddenField)FindControl("CorMasc");
        HiddenField CorFem = (HiddenField)FindControl("CorFem");
        int NColunas = Convert.ToInt32(NColunasHF);
        TableRow Firstrow = new TableRow();
        table.Rows.Add(Firstrow);
        for (int i = 1; i <= NCamas; i++)
        {
            if (i % NColunas == 0)
            {
                TableRow row = new TableRow();
                table.Rows.Add(row);
                TableCell cell = new TableCell();
                cell.BackColor = System.Drawing.Color.LightGreen;
                cell.CssClass = "celula";
                row.Cells.Add(cell);
            }
            else
            {
                TableCell cell = new TableCell();
                cell.BackColor = System.Drawing.Color.LightGreen;
                cell.CssClass = "celula";
                Firstrow.Cells.Add(cell);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

asp.net

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

     <asp:SqlDataSource
        ID="ParametrosBD"
        ConnectionString ="<%$ ConnectionStrings:principal %>"
        ProviderName = "System.Data.SqlClient"
        SelectCommand = "SELECT par_Id, par_NCamas, par_NColunas, par_CorMasculino, par_CorFeminino FROM Parametros WHERE par_Id=1"
        runat="server">
       </asp:SqlDataSource>
    <asp:ListView ID="InternamentosListView" runat="server"
            DataSourceID="InternamentosBD">
        <LayoutTemplate>

            <table id="camas" runat="server">


            </table>

        </LayoutTemplate>
        <ItemTemplate>
            <asp:HiddenField ID="NCamas" runat="server" Value='<%# Bind("par_NCamas") %>' />
            <asp:HiddenField ID="NColunas" runat="server" Value='<%# Bind("par_NColunas") %>' />
            <asp:HiddenField ID="CorMasc" runat="server" Value='<%# Bind("par_CorMasculino") %>' />
            <asp:HiddenField ID="CorFem" runat="server" Value='<%# Bind("par_CorFeminino") %>' />
            <tr id="cama"></tr>
            </ItemTemplate>
    </asp:ListView>

</asp:Content>
Run Code Online (Sandbox Code Playgroud)

小智 5

要扩展MSDN上@Yura Zaletskyy的递归查找控件方法的方法,您还可以将Page本身用作包含控件,以开始对该难以捉摸的表控件进行递归搜索(我知道这很令人发疯,我去过那里。 )这里还有一些可能会有所帮助的方向。

using System;
using System.Collections.Specialized;
using System.Web;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI;

public partial class Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Table table = (Table)FindControlRecursive(Page, "camas");
        if (table != null)
        {
            //Do awesome things.
        }
    }

    private Control FindControlRecursive(Control rootControl, string controlID)
    {
        if (rootControl.ID == controlID) return rootControl;

        foreach (Control controlToSearch in rootControl.Controls)
        {
            Control controlToReturn = FindControlRecursive(controlToSearch, controlID);
            if (controlToReturn != null) return controlToReturn;
        }
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)