2

ユーザーがASP.NETの[送信]ボタンをクリックしたときに[チェック済み]チェックボックスを無効にしたいのですが。ボタンのonclickイベントを使用して、JavaScriptを使用してチェックボックスを無効にできます。チェックボックスはリピーターにあります。[送信]ボタンをクリックしてフォームを送信すると、コードビハインドボタンのクリックコードでチェックされているチェックボックスは表示されません。送信ボタンがクリックされたときにチェックボックスを無効にし、ページが送信されたときにチェックボックスがオンになっていることを確認するにはどうすればよいですか?回避策はありますか?私の好みはJavaScriptでこれを行うことですが、jQueryも使用したいと思います。

function disableCheckboxes() {
    for (var count = 0; i < document.forms[0].elements.length; i++) 
    {
        if (document.forms[0].elements[count].type == 'checkbox')
        {
            document.forms[0].elements[count].disabled = true;
        }
    }
}
 <form id="form1" runat="server">
<div>
    <table>

        <asp:Repeater ID="rptCustomer" runat="server" OnItemDataBound="DisplayCustomerRepeater_ItemDataBound">
            <ItemTemplate>
                <tr>
                    <td>
                        <asp:CheckBox ID="checkSubscription" runat="server" />
                    </td>
                    <td>
                        <%# ((Customer)Container.DataItem).FirstName + " " + ((Customer)Container.DataItem).LastName%>
                    </td>
                </tr>
                <tr>
                    <td>
                        <hr />
                    </td>
                </tr>
            </ItemTemplate>
        </asp:Repeater>
    </table>
</div>
<div>
    <asp:Button ID="btnSubmit" OnClick="btnSubmit_Click"
        Text="Submit" runat="server" /></div>
</form>

protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        rptCustomer.DataSource = customers;
        rptCustomer.DataBind();
    }

    btnSubmit.Attributes.Add("onclick", String.Concat("this.disabled=true;disableCheckboxes();", ClientScript.GetPostBackEventReference(btnSubmit, "")));
}
protected void DisplayCustomerRepeater_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
    ListItemType lt = e.Item.ItemType;
    if (lt == ListItemType.Item || lt == ListItemType.AlternatingItem)
    {
        Customer customer = e.Item.DataItem as Customer;
        if (customer != null)
        {
            CheckBox chkCustomer = e.Item.FindControl("checkSubscription") as CheckBox;
            if (chkCustomer != null)
            {
                if (customer.IsEligible)
                {
                    chkCustomer.Checked = true;
                }
            }
        }
    }
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
    bool isChecked = false;

    foreach (RepeaterItem item in rptCustomer.Items)
    {
        CheckBox selectedCheckBox = (CheckBox)item.FindControl("checkSubscription");
        if (selectedCheckBox.Checked)
        {
            isChecked = true;
        }
    }
}
4

1 に答える 1

2

無効なフォーム要素は、フォームが送信されたときにブラウザーによって送信されません。

ちなみに、チェックボックスがオフの場合も同様です。無効になっているチェックボックスは、フォームが送信されたときに、有効になっているチェックされていないチェックボックスとまったく同じように処理されます。

したがって、フォームが送信される前にすべてのチェックボックスを無効にすると、対応するサーバー側のチェックボックス コントロールはポストバック時にすべてオフになります。

回避策として、各テキスト ボックスの状態を他のコントロールにコピーしてから、チェックを解除する必要があります。そして、他のフィールドを使用して、コード ビハインドの状態を確認できます。

于 2012-06-16T05:12:21.603 に答える