C# 環境で ASP.Net を使用すると、次のコードが作成されます。
<table>
<tr>
<td width="15"><asp:CheckBox ID="chkUsers" runat="server" Text="" AutoPostBack = "True" oncheckedchange="chkUsers_OnCheckedChange" />
</td>
<td width="260">
Active Users:
</td>
<td width="120">
<asp:DropDownList ID="cboActiveUsers" runat="server" Height="19px"
AutoPostBack="true" onselectedindexchanged="cboActiveUsers_SelectedIndexChanged">
<asp:ListItem>Y</asp:ListItem>
<asp:ListItem>N</asp:ListItem>
</asp:DropDownList>
</td>
<td width="15"><asp:CheckBox ID="chkAccount" runat="server" Text="" AutoPostBack = "True" oncheckedchange="chkAccount_OnCheckedChange" />
</td>
<td width="260">
Account Name:
</td>
<td width="120">
<asp:DropDownList ID="cboAccounts" runat="server" Height="19px"
AutoPostBack="true" onselectedindexchanged="cboAccounts_SelectedIndexChanged">
<asp:ListItem>Y</asp:ListItem>
<asp:ListItem>N</asp:ListItem>
</asp:DropDownList>
</td>
</tr>
</table>
チェックボックスをトグルとして使用しようとしています。まず、OnCheckedChange の部分は実行されません。理由がわからない。とにかく、ポストバック (コード ビハインド) で、どのチェックボックスがクリックされたのかを把握しようとしているので、どのコントロールを有効または無効にするかがわかります。私は次のようなことを言いたいです(明らかなaircode):
If chkUsers is the checkbox that was just clicked
{
cboActiveUsers.Enabled = true;
ddlAuditor.Enabled = true;
cboAccounts.Enabled = false;
}
If chkAccount is the checkbox that was just clicked
{
cboActiveUsers.Enabled = false;
ddlAuditor.Enabled = false;
cboAccounts.Enabled = true;
}
現在、私のコードは次のようになっています。
protected void CheckboxStatus()
{
if (chkAccount.Checked == true)
{
cboActiveUsers.Enabled = false;
ddlAuditor.Enabled = false;
cboAccounts.Enabled = true;
chkUsers.Checked = false;
}
if (chkUsers.Checked == true)
{
cboActiveUsers.Enabled = true;
ddlAuditor.Enabled = true;
cboAccounts.Enabled = false;
chkAccount.Checked = false;
}
}
これは、chkAccount がチェックされている場合は正常に機能しますが、元に戻す場合は、最初に chkAccount のチェックを外した場合にのみ機能します。それがチェックする最初のチェックボックスであるため、これは完全に理にかなっています。どちらか一方をクリックして前後にクリックし、それに応じて有効なフィールドを変更できるようにしたいのです。
テイカーはいますか?
追加: これが私の Page_Load です:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
LoadSubjects();
LoadStatusCodes();
chkUsers.Checked = true;
chkAccount.Checked = false;
}
CheckboxStatus();
}