0

我无法访问从后面的代码创建的表格单元格内的文本框的内容。在我的小程序中,表格预先填充了学生的姓名(单元格 A1)。一个文本框被添加到它下面的单元格(单元格 A2)。用户在文本框中输入 Pass 或 Fail 并单击提交。此时应显示一条消息,“学生状态已更改为(无论用户输入的内容)”。这就是问题所在——因为文本框 ID (student1) 是在后面的代码中分配的,所以文本框 ID 尚不存在于上下文中。

//Code Behind

    protected void Page_Load(object sender, EventArgs e)
    {
        Label nameStudent = new Label()
        {
            Text = "Annie McDonald"
        };

        TableCell nameCell = new TableCell();
        nameCell.Controls.Add(nameStudent);
        NameRow.Cells.Add(nameCell);

        TextBox status = new TextBox()
        {
            ID = "student1",
            Text = "Pass or Fail"
        };

        TableCell statusCell = new TableCell();
        statusCell.Controls.Add(status);
        StatusRow.Cells.Add(statusCell);
    }

    protected void sumbitChange_Click(object sender, EventArgs e)
    {
        Confirm.InnerText = "The students status was changed to " + student1.Text;

    }


<body>

<form id="form1" runat="server">
<asp:Table ID="StudentRoster" runat="server">
<asp:TableRow ID="NameRow" runat="server" />
<asp:TableRow ID="StatusRow" runat="server" />
</asp:Table>

<asp:Button ID="sumbitChange" text="Submit" runat="server" OnClick="sumbitChange_Click"/>

    <p id="Confirm" runat="server"></p>
</form>
</body>
4

2 回答 2

1

您需要在 TableRow 中找到 TextBox。试试下面的代码:

protected void sumbitChange_Click(object sender, EventArgs e)
{
    TextBox student1 = StatusRow.FindControl("student1") as TextBox;
    Confirm.InnerText = "The students status was changed to " + student1.Text;

}

我已经测试过了,它正在工作。

于 2013-11-11T01:21:25.077 回答
0

在我看来,您误解了 ASP.NET WebForms 的工作方式。*.aspx您通常在or文件中声明控件,为*.ascx它们分配一个 ID 并通过后面的代码(*.aspx.cs*.ascx.cs)访问它们。

在你的情况下,这看起来像这样:

* .aspx 文件

<form id="form1" runat="server">   
    <p class="someFancyInformationStyle"><asp:Label ID="statusLabel" runat="server"></asp:Label></p>
    <table>
        <tr>
            <th>Name</th>
            <th>Status</th>
        </tr>
        <tr>
            <td><asp:Label ID="nameLabel" runat="server"></asp:Label></td>
            <%-- Or even better, use a drop down --%>
            <td><asp:TextBox ID="statusTextBox" runat="server"></asp:TextBox></td>
        </tr>
        ...
    </table>
</form>

文件后面的代码:

protected void sumbitChange_Click(object sender, EventArgs e)
{
    statusLabel.Text = "The students status was changed to " + statusTextBox.Text;
}
于 2013-11-11T01:26:09.350 回答