validate checkbox asp.net c#

ε祈祈猫儿з 提交于 2020-01-04 04:06:26

问题


I am trying to validate two checkboxes. One of them must be checked in order for the form to be valid. I would like to use a CustomValidator control, and validate on the server.

(This .ascx page is a form that is displayed on a different .aspx page.)

First I put in the checkboxes and a CustomValidator control on my .ascx page. Like this:

<tr>
        <td colspan="3">
            <input type="checkbox" runat="server" name="EmailCourse" class="" id="EmailCourse" value="" />
                Email course
<asp:CustomValidator id="CustomValidator1" runat="server" ErrorMessage="No checkbox checked" 
                 OnServerValidate="validateCheckBoxes_ServerValidate">
                </asp:CustomValidator>

        </td>
    </tr>
<tr>
        <td colspan="3">
            <input type="checkbox" runat="server" name="SpecialReport" class="" id="SpecialReport"  value="" />
                Special report
        </td>
    </tr>

Then, I added the validateCheckBoxes_ServerValidate function in the code-behind, on the .ascx.cs page, like this:

            protected void validateCheckBoxes_ServerValidate(object source, ServerValidateEventArgs args)
        {
            if (!EmailCourse.Checked && !SpecialReport.Checked)
                args.IsValid = false;
            else
                args.IsValid = true;

    }

When I try to open the page that uses this form on my local site to see what it looks like, I get an error, like this:

Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

Compiler Error Message: CS1061: 'ASP.common_controls_specialreportform_ascx' does not contain a definition for 'validateCheckBoxes_ServerValidate' and no extension method 'validateCheckBoxes_ServerValidate' accepting a first argument of type 'ASP.common_controls_specialreportform_ascx' could be found (are you missing a using directive or an assembly reference?)

And:

error CS1061: 'ASP.common_controls_specialreportform_ascx' does not contain a definition for 'validateCheckBoxes_ServerValidate' and no extension method 'validateCheckBoxes_ServerValidate' accepting a first argument of type 'ASP.common_controls_specialreportform_ascx' could be found (are you missing a using directive or an assembly reference?)

Does anyone know what the cause of this error is? I'm new at asp.net and am having trouble with this.

Thanks!


回答1:


You put validateCheckBoxes_ServerValidate in *.ascx.cs when it should be on ur aspx.cs . On ascx.cs you can't refer the control it is on Parent like this.

put this code to ur aspx.cs file:

protected void validateCheckBoxes_ServerValidate(object source, ServerValidateEventArgs args)
{
        if (!EmailCourse.Checked && !SpecialReport.Checked)
            args.IsValid = false;
        else
            args.IsValid = true;

}

Edit:

Your custom Validator on ascx should seems like:

<asp:CustomValidator id="CustomValidator1" runat="server" ErrorMessage="No checkbox  checked" ControlToValidate="EmailCourse" OnServerValidate="validateCheckBoxes_ServerValidate"/>

without this ControlToValidate attribute server don't know which control u would like to validate.

Edit2:

Did u try to use change <input type="checkbox"/> to <asp:CheckBox />? and tell me how this should be Validate after btn click or after checkbox checked/unchecked?

Edit3:

Check that in your .ascx.designer.cs EmailCourse got proper Type.

Edit4:

When u have <asp:CheckBox .../> on your *.ascx file u should have in your ascx.designer.cs this type protected global::System.Web.UI.WebControls.CheckBox EmailCourse

Please let me know if this help.




回答2:


Qs your question seems to be answered, I want to show you how you can write less

protected void validateCheckBoxes_ServerValidate(object source, ServerValidateEventArgs args)
{
args.IsValid = (!EmailCourse.Checked && !SpecialReport.Checked);
}

This is the same than what you wrote except this is in one line




回答3:


I've maked a working example of what u tryed to do @user1463201

here is .aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ValidationExample._Default" %>

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

   <html xmlns="http://www.w3.org/1999/xhtml">
   <head runat="server">
   <title></title>
   </head>
   <body>
      <form id="form1" runat="server">
        <div>
          <asp:ValidationSummary runat="server" ID="myValidationSummary" ValidationGroup="validation"/>
           <table>
             <tr>
                <td>
                  <asp:CheckBox runat="server" ID="cbxEmailCourse" Text="Email course" EnableViewState="True" AutoPostBack="True"/>
              </td>
            </tr>
            <tr>
              <td>
                <asp:CheckBox runat="server" ID="cbxSpecialReport" Text="Special report"/>
              </td>
           </tr>
           <tr>
              <td>
                <asp:TextBox Visible="False" Text="t" runat="server" ID="txtValid" ValidationGroup="validation"></asp:TextBox>
              </td>
              <td>
                <asp:Button runat="server" ID="btnValid" Text="Validate form" ValidationGroup="validation" OnClick="btnValid_Click"/>
                <asp:CustomValidator runat="server" ID="cValidator" ControlToValidate="txtValid" ValidationGroup="validation" OnServerValidate="cValidator_Validate"></asp:CustomValidator>
              </td>
          </tr>
      </table>
   </div>
  </form>
  </body>
 </html>

and aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ValidationExample
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void cValidator_Validate(object source, ServerValidateEventArgs args)
        {
            args.IsValid = cbxEmailCourse.Checked && cbxSpecialReport.Checked;
        }

        protected void btnValid_Click(object sender, EventArgs e)
        {
            if (!Page.IsValid)
               Response.Write("Page are not Validate");
        }

    }
 }

I hope my work will help somebody:) enjoy




回答4:


OK. So here's what worked:

As harry180 suggested, I did need to switch the input-type="CheckBox" to asp:CheckBox.

This triggered a run-time error, which I commented about above. The run-time error was because I had not recompiled the solution after making the change, in order that the ascs.designer.cs file be modified.

After recompiling, the code works.



来源:https://stackoverflow.com/questions/11080251/validate-checkbox-asp-net-c-sharp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!