Solved

Validating form fields before printing with client side scripts

Posted on 2007-04-03
6
1,267 Views
Last Modified: 2013-11-26
Hello,
I am creating a webform using Visual Studio 2005 with asp.net 2.0. I am using a single button control to postback the data on the form so that I can e-mail it to specified recipients. I am also using the same button to open a print dialog by using the OnClientClick event. I have been able to get the button to both postback and open the print dialog, but I also want the button to validate the page by using Page.IsValid before the users can even print it off. Right now, they can print without having to fill out all of the required fields. Originally, this is what I started with:

OnClick="printButton_Click" OnClientClick="window.print()" />  (this worked fine but did not validate before printing)

This is what I have come up with to do the validation, but I can't get it to work properly:

OnClick="printButton_Click" OnClientClick="if (Page.IsValid = true) {window.print()}" />
0
Comment
Question by:odie532
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
6 Comments
 
LVL 33

Expert Comment

by:knightEknight
ID: 18845690
use two == instead of one

if (Page.IsValid == true)
0
 

Author Comment

by:odie532
ID: 18845896
I changed the = to have two as opposed to one, but still no luck. Here is what I have now:

OnClick="printButton_Click" OnClientClick="if (Page.IsValid == true) {window.print()}" />

It doesn't seem to be sending the e-mails anymore either since I made that change. For good measure, here is the code from the printButton_click event:

protected void printButton_Click(object sender, EventArgs e)
    {

        if (Page.IsValid)
        {
            string supplierName = supplierNameTextBox.Text;
            string returnAddress = returnAddressTextBox.Text;
            string pcName = pcNameTextBox.Text;
            string pcPhone = pcPhoneTextBox.Text;
            string pcFax = pcFaxTextBox.Text;
            string pcEmail = pcEmailTextBox.Text;
            string partNumber = partNumberTextBox.Text;
            string partDescription = partDescriptionTextBox.Text;
            string poNumber = poNumberTextBox.Text;
            string poLineNumber = poLineNumberTextBox.Text;
            string supplierNotificationDate = supplierNotificationTextBox.Text;
            string matReturnAuth = returnMatAuthTextBox.Text;
            string reasonReturned = reasonReturnTextBox.Text;
            string actionTaken = actionTakenTextBox.Text;
            bool correctiveActionRequired = correctiveActionRequiredCheckBox.Checked;
            string ncNumber = ncNumberTextBox.Text;
            string notes = notesTextBox.Text;
            string results = "Supplier Name:\t" + supplierName + "\n\nReturn Address:\t" + returnAddress + "\n\nPrimary Contact Name:\t" + pcName + "\n\nPrimary Contact Phone:\t" + pcPhone + "\n\nPrimary Contact Fax:\t" + pcFax + "\n\nPrimary Contact Email\t" + pcEmail + "\n\nPart Number:\t" + partNumber + "\n\nPart Desc:\t" + partDescription + "\n\nPO Number:\t" + poNumber + "\n\nPO Line Number:\t" + poLineNumber + "\n\nSupplier Notification Date:\t" + supplierNotificationDate + "\n\nMaterial Return Authorizatized By:\t" + matReturnAuth + "\n\nReason Returned:\t" + reasonReturned + "\n\nAction Taken:\t" + actionTaken + "\n\nCorrective Action Required?\t" + correctiveActionRequired + "\n\nNC Number:\t" + ncNumber + "\n\nNotes:\t" + notes;

            MailMessage message = new MailMessage();

            message.From = new MailAddress("WebForms@precision-aerospace.com");

            //message.ReplyTo = new MailAddress(senderEmail);

            message.To.Add(new MailAddress("rmarkley@precision-aerospace.com"));

            //message.To.Add(new MailAddress("kdorr@precision-aerospace.com"));

            //message.CC.Add(new MailAddress("rheyboer@precision-aerospace.com"));

            //message.CC.Add(new MailAddress("kwozniak@precision-aerospace.com"));

            //message.CC.Add(new MailAddress("dklompf@precision-aerospace.com"));

            //message.CC.Add(new MailAddress("jwaller@precision-aerospace.com"));

            //message.CC.Add(new MailAddress("jcase@precision-aerospace.com"));

            //message.CC.Add(new MailAddress("mkempf@precision-aerospace.com"));

            message.Subject = "Return Parts Notice";

            message.Body = results;

            SmtpClient client = new SmtpClient();

            client.Send(message);

            //Response.Redirect("confirmationPage.htm");
        }

    }
}
0
 

Author Comment

by:odie532
ID: 18846079
I have the e-mail portion of it working again. With this code

OnClientClick="if (Page.IsValid == true) {window.print()}" />

the web form posts back and emails the information, but does not launch the print dialog.

With this code:

OnClientClick="window.print()" />

The print dialog opens, but there is no validation so the user could basically print off a blank form if they wanted to. I want to prevent that by using the Page.IsValid. Is it possible to call that from a client side script and still open the print dialog with the same button. I realize that I could use two buttons, but the users around here get confused easily.
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 19

Accepted Solution

by:
dakyd earned 125 total points
ID: 18846467
The trick is that Page is a .NET object, and it's instantiated on the server.  You can't access it directly from the javascript, because that exists on the client side.  

That said, though, if you enable client side validation on your validators, a bunch of javascript functions get created & included in an external js file.  Those functions can do the validation for you, since they are the client side equivalent of the pieces that make up Page.IsValid.

The easiest way to do this is to give all the validators that you want done on the client side a validation group.  Then, you can call a function called Page_ClientValidate(), and pass in the validation group.  For example:

OnClientClick="if (Page_ClientValidate('validGrp')) window.print();

I used a group name of "validGrp", but you can use anything you want.  If you already have different validator group names, or want to use validators from multiple groups, you'd want something like this:

OnClientClick="if (Page_ClientValidate('validGrp') && Page_ClientValidate('grp_name2') && Page_ClientValidate('grp_name3')) window.print();

You can add as many validator groups as you want, though I'd be surprised if you've got more than 3 validator groups.

If you're interested in seeing all the client-side functions, do a view source on your page, and look for the <script> tags that VS automatically adds in.  One of the WebResource.axd files will contain all of the validation functions (there is no specific name, it all depends on what else you've got on your page).  It's a pain to dig through, but the functions are all there.

Anyhow, hope that helps.
0
 

Author Comment

by:odie532
ID: 18846600
Thanks dakyd. That did exacly what I was looking for. I already had client side scripting enabled on my validation controls, but I never thought to group them. I had a felling that calling the Page class directly from the client side script wouldn't work out so well.
0
 

Expert Comment

by:2008Madhu
ID: 21286104
What do I do If the page has userControls and the User Controls have there own validators.
In addition ,the page also have a javascript validation which validates the required fields which gets called as from a customvalidatior in the page.

If I use this solution,wont the validations be happening twice?

0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article discusses the difference between strict equality operator and equality operator in JavaScript. The Need: Because JavaScript performs an implicit type conversion when performing comparisons, we have to take this into account when wri…
Nothing in an HTTP request can be trusted, including HTTP headers and form data.  A form token is a tool that can be used to guard against request forgeries (CSRF).  This article shows an improved approach to form tokens, making it more difficult to…
The viewer will learn the basics of jQuery, including how to invoke it on a web page. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery.: (CODE)
The viewer will learn the basics of jQuery including how to code hide show and toggles. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery…

726 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question