asp.net onClick not executing

I am filing this in the category of WTF (What Terrible Functionality). 

We have all created forms with many different input controls that post back information we then process in some way.  Our users have come to expect that when they hit enter while filling out the form that it will trigger the submission of the form, and we usually do the processing through the onClick event of the submit button. 

I was creating a very simple form 1 textbox and a button that was to be used for a search page for an Intranet site.  During testing I discovered that sometimes this worked just fine and other times it didn’t work at all.  I could not figure out from users descriptions what they were doing differently.  I started paying special attention to the testers and how they were submitting the search criteria.  One user would type the search string then press tab, highlighting the submit button then press enter.  Another user would type the search criteria then with the mouse click the submit button.  It worked properly for both of these users.  But, one user would enter the search criteria then with the cursor still in the text box would hit enter.  It wouldn’t work.

This is an issue with the way that IE submits form data in the special circumstance of one textbox control on a form and the user pressing Enter while the textbox has focus.  4 Guys from Rolla have an excellent article that explains this behavior Enter and the Button Click Event.  Basically, IE does not submit the buttonID – Value pair for the submit button in this special circumstance.  4 Guys from Rolla offer a workaround of adding a second textbox and hiding it.

I think Microsoft, if they are aware, need to re-program this functionality in IE to always submit the buttonID – Value pair.  Other browsers work this way so its not impossible.

5. February 2009 13:41 by Duane | Comments (1) | Permalink

asp:ListView Insert and Update not working

I have been working on a solution that used the asp:ListView to manipulate data from an access database.

After defining the Layout, Item, EditItem, and Update Templates I was impressed with how much control I had over the display formats and CSS integration that this control allows.  The template I was using is a standard html table.  The display of the data worked perfectly, but when I attempted to edit a record it replaced everything with blank values.  Inserting a new record either gave me an error or inserted a new record with all the fields blank.

I started to troubleshoot by looking at various examples and tutorials on MSDN and the Internet.  I could see no difference between what I had coded and the examples.  I was using an AccessDataSource and all of the examples were using SqlDataSource, so I redefined the data source to be Sql and still the same behavior, display worked fine but editing did not work. 

I am one of those people who prefers to hand code as much as possible to make sure that I am understanding what is happening and how the controls work.  But, I had reached my limits, I just could not figure out what I was doing wrong.  I broke down and used the wizard for the ListView and let it create the templates and data source.  This worked. 

So after looking at the templates I discovered one little difference.  In my Item templates I had defined the <tr> tags to include the runat=”server” directive.  I removed this directive and everything started working like it is supposed to.

Why did this fix it?  Well, as near as I can figure when the items are inserted into the template replacing the itemPlaceholder the runat=”server” directive in the item templates overrode / hid / replaced the methods from the itemPlaceholder.

30. January 2009 09:30 by Duane | Comments (1) | Permalink

AutoEventWireup and asp:Repeater

So for the last few days I have been scouring through lines and lines of code trying to figure out why the ASP Repeater control <asp:repeater ...> control was not working. 

I checked everything from the record set to the data binding to make sure I had covered all the bases.  Everything checked out but when I loaded the page the data was not displayed.

So in an attempt to troubleshoot the situation I created a new C# web form in VS 2005.  Keeping it simple I added just the one repeater control and data bound it to a single table.  Nothing fancy.  Loaded this page and it worked.

Over the next two days I methodically altered the non-functional page to be almost exactly like the functional page.  I was still having problems.  I even linked in the Master Page, CSS, and other supporting doc's to the functional page to see if it was something in one of them that was causing the problem.  I even altered the Page tag to point at the same CodeFile and still no Luck.

So then I paid a little more attention to this line... 

<%@ Page MasterPageFile="~/StandardLayout.master" Language="C#" AutoEventWireup="false" CodeFile="Default.aspx.cs" Inherits="Default" %>

It is at the top of every page, and I generally don't have reason to mess with it

Then I noticed that in the functional page the AutoEventWireup="true" and this attribute was missing from the non-functional page.

I added this attribute to the non-functional page and reloaded.  IT WORKS!!

So, what is AutoEventWireup and what does it do...

There is an excellent post at

http://odetocode.com/Blogs/scott/archive/2006/02/16/2914.aspx

Scott Allen gives you all the information you need as well as ways to deal with the different behaviors.

Basically my issue boiled down to the fact that the Page_Load event was not firing and so the data binding never occurred.

For performance reasons and not to break other pages I have set the AutoEventWireup to false and used Scott's work around.

Thank you Scott!!!

6. February 2008 11:54 by duners88 | Comments (0) | Permalink