Trace option for ASP.NET control will be useful to inspect event sequence.

Sometimes to understand sequence of events in ASP.NET page, it is useful to set
@page TRACE=”true”
It shows(among other details) the sequence of page events and time that took each event to execute.
However you can’t request the same trace facility for user control events. You have to insert your own Trace.WriteLine (or similar) statements, which is quite annoying. I’ve posted the suggestion to MS Feedback site, but they do not want to implement it.
 
Related articles that describe events  and events order:
FAQ: Sequence that events are raised for Pages, UserControls

ASP.NET Page Life Cycle Overview (and quick sheet)

Not directly related article: Control State vs. View State Example

Function to get parent GridView for GridViewRow

A reference to the GridView can be obtained by using gridViewRow.Parent.Parent or (GridView) gridViewRow.NamingContainer(quote from here).

So I’ve created the static function:

        public static GridView GetParentGridView(GridViewRow row)
        {
            //NOTE row.Parent doesn’t return GridView
            GridView gridView = (GridView)row.NamingContainer;
            return gridView;
        }
 

 

Visual Studio Editor doesn’t provide interface to create Event Handlers in ASP.NET Web Pages

But you can’t select the page object in Design view to specify events in Properties.

In code-behind pages that use C#, because the control name will not appear in the drop-down list.

It seems that C# event handler for page can be created only manually!?
According to VS2008 help, the new version has no improvement in this area.
Why C# editor doesn’t have control drop-down list on the left top corner, as VB editor has?

Min and Max methods for DateTime

Math.Max Method doesn’t have overload for DateTime

So I’ve created

        public static DateTime Min(DateTime t1, DateTime t2)

        {

            if (DateTime.Compare(t1, t2) > 0)

            {

                return t2;

            }

            return t1;

        }

        public static DateTime Max(DateTime t1, DateTime t2)

        {

            if (DateTime.Compare(t1, t2) < 0)

            {

                return t2;

            }

            return t1;

        }

 

Reduce use of HTTPS protocol as much as possible

I’ve noticed that some pages on our site were opened from my home computer with huge delay –more than 30sec, but others- almost instantly.
The problem was with pages that use HTTPS(SSL protocol). It seams that my internet provider had performance problem, but it had huge impact on pages that was opened using SSL.
In the normal development/test environment we never noticed the problem, but it could be a big issue  for users with low bandwidth. 
 
We need to redesign our application to use https protocol only for a few pages, that work with passwords and credit cards. It also will help with annoying messages: “The page has both secure and un-secure sections”
 
There are a few related links :
 

Visual Studio new item wizard generates ambiguous class names

When I added a new Master page in Visual Studio 2005, named as MyApp.Master, the generated class was named just MyApp.
I’ve already have a namespace with the same name MyApp, and it caused the compiler errors.
It will be good if new file wizard by default create class names, that include the type of generated object, e.g. MyAppMaster class.
Similar should be apply for other ASP.NET objects, e.g. Customer.aspx page should use CustomerPage class, and Customer.ascx user control should use CustomerUsc class. 

Differences in Internet Explorer and FireFox CSS and Javascript

I’ve done quite a few web UI changes, including CSS styles and javascript testing in IE. Now I have to  ensure, that it also work in FioreFox.

The suggested  Collection of Global CSS Reset Styles not always work , if site has already some default style settings.
I also incorrectly used parentElement in DOM – always use parentNode instead.
innerText
Thanks to Damian Edwards who pointed another FireFox incompatibility bug in our javascript code:
The line in javascript causing the issue easily figured out using Firebug.
 The elem.innerText property is an IE proprietary addition and thus not usually supported by other browsers. Instead you should be getting the “inner text” of the cell using something like the following:

elem.firstChild.nodeValue;

This uses W3C DOM compliant properties to retrieve the text value of the first TextNode of the cell. This makes it more likely to work across browsers.

 
Width in IE and Firefox   treated differently.
According to standard (that FireFox follows), content width is set excluding paddings and border(see figure there).
“The size of the box is the sum of the element width (i.e. formatted text or image) and the padding, the border and the margin areas”.
But in IE the width of the box is the width of the content plus any border or padding.
In other words:
width(IE)=”padding-left”+”border-left”+ width(FF) + “padding-right”+”border–right”.
To make IE to follow standard can be done by specifying
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN”
    “http://www.w3.org/TR/html4/loose.dtd”>
or
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0//EN”>
Unfortunately, this change will have MAJOR impact on existing web site. In our application we effectively have one page with different user controls loaded dynamically, so the change will effect everything -too risky.
Class and ID Names are Case Sensitive in FireFox
IE is not case sensitive, when you search by ID.  If your  script is working in IE, but not if FF, check that the IDs are written consistently.
More tips can be found in Adrian Anttila’s post JavaScript differences in Firefox and Internet Explorer  
Different Tools.
For IE I mentioned some tools in my older post Tools to debug/Trace ASP.NET applications.

How to detect Debug mode in JavaScript

I’ve asked a question on forum:

AJAX ScriptManager Class  has a IsDebuggingEnabled property, that is available in server code. I want in my client Javascript function to determine, do I running debug or release mode.

MS Online Community Support suggested :

You can create a hidden field to the page, then, check the IsDebuggingEnabled property of ScriptManager , if it is true, set the value of the hidden field to “true”, else, false.

It will work, but I expected the method available in some AJAX client library class.

Declare different CSS rules for Firefox and Internet Explorer 7

The post Creating different CSS style selector definitions for different browsers (Firefox, Internet Explorer 7 and IE 6.0) with subsequent comments describes that
You can have the same attribute for different browsers in the same rule by specifying # and _ prefix
.context_bar_form_field
{
height: 15px;/* apply to all browsers */
#height: 15px;/
* override for Microsoft Internet Explorer browsers*/
_height: 21px; ;/* override for IE browsers 6.0 and older */
}
<!–[if gt IE 5]>
<style type=”text/css” media=”screen”>
.idonnyCSS{font-size: 1.3em }
/*The above CSS definitions will only be applies to IE versions greater than 5*/
</style>
<![endif]–>

I prefer the first opton for small changes to keep all definitions for the class/selector in one place.

CSS Filters chart describes “Will the browser apply the rule(s)?”.


More discussion are in
http://24ways.org/2005/avoiding-css-hacks-for-internet-explorer

How to use different client AJAX UpdatePanel error handling for different UpdatePanels?

I have an ASP.NET AJAX page with several UpdatePanels. If error occured during asyncronous postback, I want to ignore it for some panels and show errors for other updatepanels. The samples that I found(like  Customizing Error Handling for ASP.NET UpdatePanel Controls.) suggested to call add_endRequest and from EndRequestEventArgs  use error Property  .

 Dave Ward suggested that In EndRequest, you can check sender._panelsToRefreshIDs. It’s a JavaScript array of UpdatePanel IDs being updated in the partial postback

My question on forum is how can I find which of UpdatePanels caused the particular Request in EndRequestHandler?

I found an idea in comments of How to handle a timeout in an async postback to use response Property (Sys.Net.WebRequestExecutor class.) Then I can access webRequest Property , but what to do next?

Jin-Yu Yin from MSFT  suggested to follow these steps:

1. Get which UpdatePanel is updating at the server side. Check these links:

UpdatePanel.IsInPartialRendering Property

Gets a value that indicates whether the UpdatePanel control is being updated as a result of an asynchronous postback.

The IsInPartialRendering property is intended for use by control developers who want to know when an UpdatePanel control is being updated as a result of an asynchronous postback.

Which UpdatePanel issued an Async Postback Call?

how to get which UpdatePanel has posted

2. use try… catch to catch errors, and in catch block, create an new exception which contain information of which updatepanel is updating and throw it.

3. check the information in the error at the client side, process the error based on the information