0

コード ビハインドから作成されたテーブルのセル内のテキスト ボックスの内容にアクセスできません。私の小さなプログラムでは、テーブルには学生の名前 (セル A1) が事前に入力されています。その下のセル (セル A2) にテキスト ボックスが追加されます。ユーザーはテキスト ボックスに合格または不合格を入力し、[送信] をクリックします。その時点で、「学生のステータスが (ユーザーが入力したものは何でも) に変更されました」というメッセージが表示されます。これが問題です。テキスト ボックス 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通常、またはファイルでコントロールを宣言し、ID を割り当てて、コード ビハインド (または)*.ascxを介してアクセスします。*.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 に答える