【问题标题】:On Button Click checkbox checked validation in C#在 C# 中单击按钮上的复选框检查验证
【发布时间】:2019-03-27 13:32:12
【问题描述】:

我有一个场景,我在Gridview 中显示数据。现在我想要的是,有两个按钮Approve 和Reject。我想验证在单击buttons 之一之前应检查至少一个复选框。

下面是我的 HTML。

<asp:GridView ID="grdDisplayCMMData" runat="server" AutoGenerateColumns="false" Width="100%" ShowHeaderWhenEmpty="true" CssClass="heavyTable table" EmptyDataText="No records to display"
    AllowPaging="true" PageSize="20" OnPageIndexChanging="grdDisplayCMMData_PageIndexChanging">
    <Columns>
        <asp:BoundField DataField="ID" HeaderText="Id" ItemStyle-Width="10%" />
        <asp:BoundField DataField="SAP_ID" HeaderText="Sap Id" ItemStyle-Width="10%" />
        <%--<asp:BoundField DataField="ID_OD" HeaderText="ID to OD" ItemStyle-Width="10%" />--%>
        <asp:BoundField DataField="ID_OD_COUNTCHANGE" HeaderText="ID to OD Change" ItemStyle-Width="10%" />
        <asp:BoundField DataField="ID_OD_CHANGEDDATE" HeaderText="ID to OD Change Date" ItemStyle-Width="10%" />
        <asp:BoundField DataField="RRH_COUNTCHANGE" HeaderText="RRH Count Change" ItemStyle-Width="10%" />
        <asp:BoundField DataField="RRH_CHANGEDDATE" HeaderText="RRH Count Change Date" ItemStyle-Width="10%" />
        <asp:BoundField DataField="TENANCY_COUNTCHANGE" HeaderText="Tenancy Count Change" ItemStyle-Width="10%" />
        <asp:BoundField DataField="TENANCY_CHANGEDDATE" HeaderText="Tenancy Changed Date" ItemStyle-Width="10%" />
        <asp:BoundField DataField="STATUS" HeaderText="Current Status" ItemStyle-Width="20%" />

        <asp:TemplateField HeaderText="Approve/Reject">
            <ItemTemplate>
                <asp:CheckBox ID="chkApprRejCMM" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

<div class="text-center">
    <asp:Button ID="btnApproveCMM" Text="Approve" runat="server" OnClick="btnApproveCMM_Click" CssClass="btn btn-primary" />
    <asp:Button ID="btnRejectCMM" Text="Reject" runat="server" OnClick="btnRejectCMM_Click" CssClass="btn btn-primary" />
</div>

另请参阅我的OnClick 批准事件。

protected void btnApproveCMM_Click(object sender, EventArgs e)
{
    try
    {
        IPColoFields ObjIPColoFields = new App_Code.IPColoFields();
        List<IPColoBilling.App_Code.UMS.UMSGroupDetails> UMSGroupDetails = (List<IPColoBilling.App_Code.UMS.UMSGroupDetails>)Session["lstUMSGroupDetails"];

        Session["lstUMSGroupDetails"] = UMSGroupDetails;
        string strApprove = "";

        foreach (GridViewRow gvrow in grdDisplayCMMData.Rows)
        {
            var checkbox = gvrow.FindControl("chkApprRejCMM") as CheckBox;

                if (checkbox.Checked)
                {
                    int Id = Convert.ToInt32(grdDisplayCMMData.Rows[gvrow.RowIndex].Cells[0].Text);

                    ObjIPColoFields.Unique_Id = Id;
                    ObjIPColoFields.UMS_GRP_BY_ID = intCurrentGrpId;
                    ObjIPColoFields.UMS_GRP_BY_NAME = strCurrentGrp;
                    ObjIPColoFields.UMS_GRP_TO_ID = UMSGroupDetails[1].GroupID;
                    ObjIPColoFields.UMS_GRP_TO_NAME = UMSGroupDetails[1].GroupName;
                    ObjIPColoFields.FCA_STATUS = "1";
                    ObjIPColoFields.LAST_UPDATED_BY = lblUserName.Text;
                    strApprove = CommonDB.Approve_IPCOLO_CMMLevel(ObjIPColoFields);
                }                                                         
         }
        ScriptManager.RegisterStartupScript(this, this.GetType(), "alert", "alert('Record Approved successfully'); window.location ='IpColoDefault.aspx';", true);
        BindCMMData();
    }
    catch (Exception ex)
    {
        string strErrorMsg = ex.Message.ToString() + " " + "StackTrace :" + ex.StackTrace.ToString();
        CommonDB.WriteLog("ERROR:" + strErrorMsg, ConfigurationManager.AppSettings["IPCOLO_LOG"].ToString());
    }
}

我尝试了获取复选框计数的逻辑,如果小于0,则提示错误。但是在 Checkbox 中没有这样的获取计数的属性。

请提出其他方法

【问题讨论】:

    标签: c# asp.net validation checkbox


    【解决方案1】:

    您可以使用 CustomValidator 来做到这一点。

    <asp:CustomValidator ID="CustomValidator1" runat="server" ClientValidationFunction="countCheckBoxes" 
        ErrorMessage="Check at least one"></asp:CustomValidator>
    

    然后是测试是否有任何复选框被选中的函数。

    <script type="text/javascript">
        function countCheckBoxes(oSrc, args) {
            var cnt = $('<%# GridView1.ClientID %> input[type=checkbox]:checked').length;
            args.IsValid = cnt > 0;
        }
    </script>
    

    【讨论】:

    • 让我试着检查一下。但它也会申请 Reject 吗?
    • 它适用于两个按钮。如果您只需要 Approve,则需要在 Validator 和 Button 上使用相同的 ValidationGroup。如果你想要两个按钮,那么给所有三个相同的 ValidationGroup (如果页面上没有更多按钮,则没有)。
    【解决方案2】:

    您可以按照以下步骤操作。

    1. 将一些随机类名作为“XYZ”添加到您的复选框

    &lt;asp:CheckBox ID="chkApprRejCMM" runat="server" Class="xyz" /&gt;

    2.给按钮添加OnClientClick事件

    > <asp:Button ID="btnApproveCMM" Text="Approve" runat="server"
    > OnClick="btnApproveCMM_Click" CssClass="btn btn-primary" OnClientClick
    > = "javascript:return CheckData(); " />
    

    3.使用Jquery检查是否至少有一个复选框被选中,如果在CheckData函数中没有被选中则返回false。

    `

    ` if($('input.xyz:checked').length >0) {return false;} else return true;

    `

    ` 如果函数返回 false 则不会发生回发。

    【讨论】:

      猜你喜欢
      • 2011-10-20
      • 2021-06-20
      • 1970-01-01
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      • 1970-01-01
      • 2019-10-17
      • 2012-12-28
      相关资源
      最近更新 更多