[Webinar] Streamline your web hosting managementRegister Today


'Enter key pressed' event, form submit, Page_Load, __postback in .NET

Posted on 2004-09-22
Medium Priority
Last Modified: 2011-08-18

I am using C#.NET to create some simple web pages. I noticed that 'enter_key_pressed' (window.event.keyCode == 13) will cause the postback to the server. I know I can link this event to the button_click, but have to cancel the event like:

if (window.event.keyCode == 13) {
           event.cancel = true;

Otherwise the page will be submitted twice (right?).

My question is how the 'Enter key pressed' causes the postback? I wrote a simple page to test, it didn't mean like whenever there's page, pressing the enter key would cause the form to submit. Also, I didn't see other event_handler was called in Page_Load upon pressing the enter key. So seems to me that the submit wasn't thru a default button clicking. It must be wired into some JavaScript functions created by .NET on the backend without my permission. If so, can I disable it?

What if there are more than one form, which one to submit then?

Is there a way to catch this event, or to distinguish this event from a real button_click event on the Page_Load() function? So instead of doing but.click() on client side, I can explicitly call the handler on the server-side?

Thanks a lot.

Question by:ds869
  • 3
  • 2
  • 2
  • +1
LVL 24

Accepted Solution

Justin_W earned 300 total points
ID: 12129287
>> My question is how the 'Enter key pressed' causes the postback?
It is part of IE's built-in behavior.  The standards don't really specify exactly how browsers are required to handle Enter, but it usually depends on the type and number of form input tags in the page.  You can capture and cancel the event using a OnKeyDown handler on the <body> tag if you want to prevent it completely.

Expert Comment

ID: 12130515
4 open questions:
09/23/04 http://www.experts-exchange.com/Q_21141621.html "'Enter key pressed' event, form submit, ..."
09/14/04 http://www.experts-exchange.com/Q_21129660.html "Server-side Validator.IsValid value is a..."
10/10/03 http://www.experts-exchange.com/Q_20762418.html "How to add user defined functions (UDF) ..."
07/22/03 http://www.experts-exchange.com/Q_20685559.html "Can't open a remote file which is on sha..."

Please maintain your old Questions
LVL 10

Expert Comment

ID: 12130801

When you create a FORM tag and put text boxes and a submit button, the browser will usually treat the Enter key as a command to submit the form.  It is as if you are calling the submit() method of the form object in JavaScript.

Depending on what controls you have on your page, ASP.NET might write a JavaScript function called __doPostBack() into your page.  The controls that do that use it to send information about the control and the postback to the server by putting that data in the __EVENTTARGET and __EVENTARGUMENT hidden text box fields that are also added to the HTML.  Then __doPostBack calls the submit() method of the form object.  So no, you are not necessarily posting the page back twice by hitting the enter key.  I can see some situations where you would not want the enter key to cause a postback and you can cacnel the event as you show in your question, but unless there is a reason to do so, it should not be necessary.

The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.


Author Comment

ID: 12134564
Thaks all.

I realized that I also have a couple of ImageButton controls on the page in the form of <input type='image'>. When I removed them from the form along with <input type=submit>, pressing the 'Enter' key won't trigger the form.submit().

Is there a way to set the imagebutton as 'input' intead of 'submit', e.g. using <input type='button'> instead of <input type='submit'> ? And although the imagebutton did trigger the form.submit, its event handler at the server-side wasn't called. Why?

The reason that pressing the Enter key submits the form twice is that I linked this event to a inputbutton.click which will submit the form, and it also triggers one of the imagebutton to submit the form, again. Those image button is for sorting the table only, which will be done at the server-side.

No one seems interested in answering my last question:

>Is there a way to catch this event, or to distinguish this event from a real button_click event on the Page_Load() function? So instead of >doing but.click() on client side, I can explicitly call the handler on the server-side?

Thanks again.



Author Comment

ID: 12134812
So, if there's a submit button or an image button, the form will be submitted by enter.key.pressed, BUT not thru either one of the buttons, and the button's event handler at the server side won't be called. Is this right?

Author Comment

ID: 12135121
If I add the onClick to image button, like

<input type="image" name="te" id="te" src="./images/up.gif"  onClick="alert(event.keyCode)">

the event.keyCode is always 0, no matter I clicked on the image button or anywhere on the form.

Can anybody tell me why?

LVL 10

Assisted Solution

jnhorst earned 300 total points
ID: 12135761
If you are clicking on a button or somewhere on the form, keyCode will be 0 because no key has been pressed on the keyboard.  KeyCode is for keyboard input, not mouse input.

What event handler are you referring to when you say it isn't being fired?  I added an image button to a form with nothing else on it and then did this in the Page_Load event.

if (!this.IsPostBack)
     this.ImageButton1.Attributes.Add("onclick", "javascript:alert(\"This is a test.\");");
     this.ImageButton1.Attributes.Add("onkeydown", "javascript:alert(\"KeyCode is \" + event.keyCode);");

I got the alert, clicked OK and the postback fired and the server-side click event executed.  If I tabbed the button into focus and hit the enter key I got my key code alert, then the onclick event fired and then the page posted to the server firing the server-side click event.

LVL 24

Expert Comment

ID: 12135806
>Is there a way to catch this event,
I answered this above.

>or to distinguish this event from a real button_click event on the Page_Load() function?
No, not without catching the event on the client side.

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone 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

In this Article, I will provide a few tips in problem and solution manner. Opening an ASPX page in Visual studio 2003 is very slow. To make it fast, please do follow below steps:   Open the Solution/Project. Right click the ASPX file to b…
I recently went through the process of creating a Calendar Control of events with the basis of using a database to keep track of the dates that are selectable, one requirement was to have the selected date pop-up in a simple lightbox.  At first this…
There may be issues when you are trying to access Outlook or send & receive emails or due to Outlook crash which leads to corrupt or damaged PST file. To eliminate the corruption from your PST file, you need to repair the corrupt Outlook PST file. U…
Stellar Phoenix SQL Database Repair software easily fixes the suspect mode issue of SQL Server database. It is a simple process to bring the database from suspect mode to normal mode. Check out the video and fix the SQL database suspect mode problem.
Suggested Courses
Course of the Month11 days, 4 hours left to enroll

612 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