在代码后面引用非ASP复选框

时间:2018-08-26 06:01:47

标签: c# asp.net webforms

我试图在后面的C#代码中引用一个非ASP复选框。该复选框不是asp元素的原因是它是即时生成的,而不是网站的一部分。到目前为止,我具有以下相关的aspx:

     @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(''),
      ),
      body: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          Padding(
            padding: EdgeInsets.all(10.0),
            child: Row(
              children: <Widget>[
                CircleAvatar(
                  minRadius: 45.0,
                  backgroundImage: NetworkImage(
                      'https://www.ienglishstatus.com/wp-content/uploads/2018/04/Anonymous-Whatsapp-profile-picture.jpg'),
                ),
                Padding(
                  padding: EdgeInsets.only(left: 10.0),
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: <Widget>[
                      Text(
                        'Testing Name',
                        style: TextStyle(
                          fontSize: 22.0,
                          color: Colors.grey.shade800,
                        ),
                      ),
                      Text(
                        '@testing_username',
                        style: TextStyle(
                          fontSize: 13.0,
                          color: Colors.grey.shade800,
                        ),
                      ),
                    ],
                  ),
                ),
              ],
            ),
          ),

          DefaultTabController(
            length: 3,
            child: Column(
              children: <Widget>[
                TabBar(
                  tabs: <Widget>[
                    Tab(
                      icon: Padding(
                        padding: EdgeInsets.all(6.0),
                        child: Image.asset(
                          "assets/images/icons/butterlike.png",
                          color: Colors.grey.shade800,
                        ),
                      ),
                    ),
                    Tab(
                      icon: Padding(
                        padding: EdgeInsets.all(6.0),
                        child: Image.asset(
                          "assets/images/icons/butterlike.png",
                          color: Colors.grey.shade800,
                        ),
                      ),
                    ),
                    Tab(
                      icon: Padding(
                        padding: EdgeInsets.all(6.0),
                        child: Image.asset(
                          "assets/images/icons/butterlike.png",
                          color: Colors.grey.shade800,
                        ),
                      ),
                    ),
                  ],
                ),

                TabBarView(
                  children: <Widget>[
                    Container(
                      color: Colors.grey,
                    ),
                    Container(
                      color: Colors.green,
                    ),
                    Container(
                      color: Colors.purple,
                    ),
                  ],
                ),
              ],
            ),
          )
        ],
      ),
    );
  }

后面的C#代码是:

<asp:Table ID="myTable" runat="server" Width="100%"> 
    <asp:TableRow>
        <asp:TableCell>A</asp:TableCell>
        <asp:TableCell>B</asp:TableCell>
        <asp:TableCell>C</asp:TableCell>
        <asp:TableCell>D</asp:TableCell>
        <asp:TableCell>E</asp:TableCell>
    </asp:TableRow>
</asp:Table>
<asp:LinkButton runat="server" ID="TEST" CssClass="btn btn-default pull-right" OnClick="TEST_Click">
    TEST <i class="m-icon-swapright m-icon-white"></i>
</asp:LinkButton> 

chkbox始终为null:(。

1 个答案:

答案 0 :(得分:1)

您需要更改两件事。

要通过FindControl查找复选框,它必须是页面控件集合的一部分,这意味着您必须添加一个CheckBox控件。

CheckBox c = new CheckBox { ID = "chk"  + i };                
tempCell.Controls.Add(c);

动态添加的CheckBox控件是Table控件集合的一部分,因此您必须在此处而不是在页面上进行搜索。

CheckBox chkbox = (CheckBox)this.myTable.FindControl("chk1");

下面您将找到代码的完整更新。

protected void Page_Load(object sender, EventArgs e)
{
    GenerateTable();
}


public void GenerateTable()
{
    int i = 0;
    bool[] box = {true, false, true, false, true};
    List<TableRow> tRows = new List<TableRow>();
    TableRow newRow = new TableRow();
    tRows.Add(newRow);
    foreach (var check in box)
    {
        TableCell tempCell = new TableCell();
        CheckBox c = new CheckBox { ID = "chk"  + i };
        c.Checked = check;
        tempCell.Controls.Add(c);                    

        tRows[0].Cells.Add(tempCell);
        i++;
    }

    foreach (TableRow row in tRows)
    {
        myTable.Rows.Add(row);
    }
}


public void TEST_Click(object sender, EventArgs e)
{
    CheckBox chkbox = (CheckBox)this.myTable.FindControl("chk1");
    if (chkbox != null)
    {
        if (!chkbox.Checked)
        {
            MessageBox.Show("Checked");
        }
        else
        {
            MessageBox.Show("NOT Checked");
        }
    }
    else 
    {           
        MessageBox.Show("NOTHING :(");                           
    }
}