Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / ASP.NET / General / February 2008

Tip: Looking for answers? Try searching our database.

Mystery: Validators don't always validate ? Can unrelated Javascript     stop them ?

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Radu - 08 Feb 2008 21:18 GMT
Hi. I'm struggling to understand what's happening here:

I have the following HTML:

<script language="javascript" type="text/javascript">
 function ShowConfirm1()
 {
   var varMessage='Would you also like to add an \"Action Taken\" on
this PIN ?'
   var varAnswer = confirm(varMessage)
   if (varAnswer == true)
   {
     document.getElementById('HiddenField1').value="1";
     return true;
   }
   else
   {
     document.getElementById('HiddenField1').value="0";
     return true;
   }
 }
 </script>

<asp:GridView
     ID="GridView1"
     DataSourceID="SqlDataSource1"
     DataKeyNames="ID"
     AutoGenerateColumns="False"
     ShowFooter="True"
     OnPreRender="GridView1_Prerender"
     OnRowUpdating="GridView1_OnRowUpdating"
     OnRowUpdated="GridView1_OnRowUpdated"
     OnRowDeleting="GridView1_OnRowDeleting"
     OnRowDeleted="GridView1_OnRowDeleted"
     Runat="server"
     >
       <Columns>
         <asp:TemplateField HeaderText="Employee PIN">
           <ItemTemplate>
             <asp:Label ID="EmployeePINLabel" Runat="Server"><
%#Eval("EmployeePIN")%></asp:Label>
           </ItemTemplate>
           <FooterTemplate>
             <asp:TextBox ID="EmployeePINTextBoxAdd" Columns="6"
OnTextChanged="EmployeePINChanged_Add" Runat="Server"></asp:TextBox>
             <asp:RequiredFieldValidator
               id="reqEmployeePINAdd"
               ValidationGroup="Footer-Add"
               ControlToValidate="EmployeePINTextBoxAdd"
               Display="Dynamic"
               Text="*"
               ErrorMessage="The employee's PIN# is required !"
               runat="server">
             </asp:RequiredFieldValidator>

             <asp:RegularExpressionValidator
               id="regexEmployeePINAdd"
               ValidationGroup="Footer-Add"
               ControlToValidate="EmployeePINTextBoxAdd"
               Display="Dynamic"
               ValidationExpression="\d{6}"
               Text="*"
               ErrorMessage="The PIN entered is not correct !"
               runat="server">
             </asp:RegularExpressionValidator>

             <asp:CompareValidator
               id="compareEmployeePINAdd"
               ValidationGroup="Footer-Add"
               ControlToValidate
="EmployeePINTextBoxAdd"
               ValueToCompare="100000"
               Operator="GreaterThan"
               Display="Dynamic"
               Text="*"
               ErrorMessage="The PIN entered is not
correct !"
               runat="server">
             </asp:CompareValidator>
           </FooterTemplate>

           <EditItemTemplate>
             <asp:TextBox ID="EmployeePINTextBoxEdit" Columns="6"
OnTextChanged="EmployeePINChanged_Edit"  Text='<%# Eval("EmployeePIN")
%>' Runat="server"></asp:TextBox>
             <asp:RequiredFieldValidator
               id="reqEmployeePINEdit"
               ValidationGroup="Row-Edit"
               ControlToValidate="EmployeePINTextBoxEdit"
               Display="Dynamic"
               Text="*"
               ErrorMessage="The employee's PIN# is required !"
               runat="server">
             </asp:RequiredFieldValidator>

             <asp:RegularExpressionValidator
               id="regexEmployeePINEdit"
               ValidationGroup="Row-Edit"
               ControlToValidate="EmployeePINTextBoxEdit"
               Display="Dynamic"
               ValidationExpression="\d{6}"
               Text="*"
               ErrorMessage="The PIN entered is not correct !"
               runat="server">
             </asp:RegularExpressionValidator>

             <asp:CompareValidator
               id="compareEmployeePINEdit"
               ValidationGroup="Row-Edit"
               ControlToValidate
="EmployeePINTextBoxEdit"
               ValueToCompare="100000"
               Operator="GreaterThan"
               Display="Dynamic"
               Text="*"
               ErrorMessage="The PIN entered is not
correct !"
               runat="server">
             </asp:CompareValidator>
           </EditItemTemplate>
           <ItemStyle HorizontalAlign="Center"/>
         </asp:TemplateField>
         .....
         .....
         <asp:TemplateField HeaderText="Edit Record">
               <ItemTemplate>
                 <asp:LinkButton
                   ID = "linkEdit"
                   ForeColor="darkBlue"
                   runat = "server"
                   CausesValidation ="false"
                   CommandName = "Edit"
                   text = "Edit"
                   >
                 </asp:LinkButton>
               </ItemTemplate>

               <EditItemTemplate>
                 <asp:LinkButton
                   ID = "linkUpdate"
                   ForeColor="darkBlue"
                   runat = "server"
                   CausesValidation ="true"
                   CommandName = "Update"
                   text = "Update"
                   >
                 </asp:LinkButton>

                 <asp:LinkButton
                   ID = "linkCancel"
                   ForeColor="darkBlue"
                   runat = "server"
                   CausesValidation ="false"
                   CommandName = "Cancel"
                   text = "Cancel"
                   >
                 </asp:LinkButton>
               </EditItemTemplate>

               <FooterTemplate>
                 <asp:Button
                   ID="cmdAdd"
                   Font-Size="Smaller"
                   Text="Save"
                   ValidationGroup="Footer-Add"
                   CausesValidation="true"
                   Runat="Server"
                   OnClientClick="javascript:return
ShowConfirm1()"
                   OnClick="cmdAdd_OnClick"
                 />
           </FooterTemplate>
           .....
         .....
</asp:GridView>

<asp:ValidationSummary
       id="validSummaryAdd"
       ValidationGroup="Footer-Add"
       ShowSummary="false"
       ShowMessageBox="true"
       HeaderText="The following things have to be fixed (Record -
Add)"
       runat="server"
/>
<asp:ValidationSummary
       id="validSummaryEdit"
       ValidationGroup="Row-Edit"
       HeaderText="The following things have to be fixed (Record -
Edit)"
       ShowSummary="false"
       ShowMessageBox="true"
       runat="server"
/>

...
...

Then I have the code:
protected void cmdAdd_OnClick(object sender, EventArgs e) //Handles
cmdAdd.Click
 {
   //Add the record to the Watchlist table, and maybe also add a
record to the Comments table...
   Util_AddRecord();
   .....
   .....
 }

and

protected void Util_AddRecord()
 //Called by cmdAdd_OnClick
 {
   ....
   ....
   bool boolAddCommentsAsWell;

   //Ask the user if he wants to also add a record in the "Comments"
table:
   if (HiddenField1.Value.Equals("1"))
     //User clicked okay
     boolAddCommentsAsWell = true;
   else
     //User clicked cancel
     boolAddCommentsAsWell = false;

   //Create a one-to-one reference between this record and the record
in Comments if
   //strCommentsID not null:
   string strCommentsID;
   if (boolAddCommentsAsWell == true)
     strCommentsID = "W " + lblID.Text;
   else
     strCommentsID = "";

   SqlDataSource1.InsertParameters["EmployeePIN"].DefaultValue =
txtEmployeePIN.Text;
   ....
   SqlDataSource1.InsertParameters["CommentsID"].DefaultValue =
strCommentsID;

   SqlDataSource1.Insert();
   ....
   ....
 }

 The problem is the following:

 - if I delete the HTML line

       OnClientClick="javascript:return ShowConfirm1()"

 and therefore skip asking the question, and if I change

     if (HiddenField1.Value.Equals("1"))
       //User clicked okay
       boolAddCommentsAsWell = true;
     else
       //User clicked cancel
     boolAddCommentsAsWell = false;

to
     boolAddCommentsAsWell = true;

then the validators validate, and the code SqlDataSource1.Insert()
executes properly.

 - if I run the code as it is, with the confirmation script and the
if (HiddenField1.... lines, the validators DON'T VALIDATE, so
therefore SqlDataSource1.Insert() inserts whatever I have entered in
the gridview. Of course, if I skip entering some cells, it will
attempt to insert NULLS, which could fail, depending on the fields.

Therefore, my question is - why don't the validators validate when I
have an extra javascript in the code ? I would have expected to have
the validators validate BEFORE the cmdAdd_OnClick starts executing...
Besides, the Javascript (ShowConfirm1) has nothing to do with them....

Thanks a lot
Alex.
Misbah Arefin - 08 Feb 2008 21:34 GMT
http://msdn2.microsoft.com/en-us/library/yb52a4x0.aspx
If client-side validation is enabled, the page includes references to script
libraries that are used to perform the client-side validation. The page
includes a client-side method to intercept and handle the Click event before
the page is submitted.

If you specify a onclientlcick method then you override the default click
event (which fires the validators). You need to include the validator
event/func in your custom onclientclick event handler

--
Misbah Arefin

> Hi. I'm struggling to understand what's happening here:
>
[quoted text clipped - 277 lines]
> Thanks a lot
> Alex.

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.