Library tutorials & articles

Implementing HTTP Handlers in ASP.NET

Handling PostBack

Now that we have our URL rewriting in place, it's time to do some real work. Based on this section's title, you've probably figured out that you're going to have some post-back issues (if you haven't already tested that out). The problem with post-back is that, when rendered, the HtmlForm object sets the action to the physical page name. Of course, this means that when you submit the form, your true page is displayed. This is obviously less than ideal for URL beautification. Not to mention it would most likely confuse your users. Well, there are two solutions to consider.

First, you can add a simple script block to fix the problem. This is the easiest solution, but there's one problem: if a user has scripting turned off (as if that is ever the case, anyway), the fix will be nullified. But, in case you still like this solution (I do), add this code to your Page class. If you don't already, I'd suggest creating a base Page object for all of your pages to implement. Then, add this code to the base Page class. This allows you a good deal of extensibility as far as adding common features easily.

Register Javascript

RegisterStartupScript( "PostBackFix",
  "<script>document.forms[0].action='';</script>" );

Your second option is to extend the HtmlForm class. This is pretty simple, as you will see below, but it comes with its own issues. The main problem that I have with this solution is that you have to explicitly add the extended HtmlForm object to replace the default HTML form tag. Not that it is hard to do, but it can get tedious if you're creating (or converting) a lot of pages.

Action-less HtmlForm Object

public class ActionlessForm : HtmlForm
{
  protected override void RenderAttributes(HtmlTextWriter writer)
  {
    Attributes.Add("enctype", Enctype);
    Attributes.Add("id", ClientID);
    Attributes.Add("method", Method);
    Attributes.Add("name", Name);
    Attributes.Add("target", Target);
    Attributes.Render(writer);
  }
}

Each method has it's own pros and cons. They're pretty simple to understand, so the decision shouldn't be too hard. Honestly, you can implement the second option through a base Page class, but that adds a lot more complexity to your system then you're probably looking for. Explore your options and be innovative.

Comments

  1. 01 Jan 1999 at 00:00

    This thread is for discussions of Implementing HTTP Handlers in ASP.NET.

  2. 13 Mar 2005 at 21:15

    thank you very much. I am knew this posting and waiting for nothoing

  3. 01 Jun 2006 at 20:40

    You seem to have forgotten an important problem with your actionless form. I have discovered that this custom form will disable the validation controls. Now the onsubmit function for client side validation needs to be added back in. I found this post about the problem (http://www.experts-exchange.com/Web/Q_21842631.html), but am still wondering if there is not an easier way to fix this.

  4. 20 Nov 2007 at 05:45

    Did you ever find a better solution for the ActionLess form - for Url Rewriting ???

    Your post to experts exchange requires a subscriptin to read the answer...

     

    Cant I just get away with in NET 2.0 putting form id='myForm' Method=""

    I know it is malformed ...

  5. 21 Nov 2007 at 12:24

    I haven't touched this since .NET 1.1. And, with IIS7, I'd say there's a better approach. I'll probably revisit this when I have some time to play with IIS7.

Leave a comment

Sign in or Join us (it's free).

Michael Flanakin Michael Flanakin is a principal .NET software architect for the US Air Force and is the president of the Air Force .NET User Group, which serves .NET developers world-wide. Michael provides guidanc...

Related podcasts

  • Microsoft MSDN Videos: New Web Developer features in VS 2010

    Published 1 month ago, running time 0h0m

    Mike Ormond, from Microsoft's Developer and Platform Group, gives a session on the top 10 items that developers might be interested in learning more about in Visual Studio 2010 and ASP.net. .net, asp.net, vs2010, visual studio

Related jobs

Want to stay in touch with what's going on? Follow us on twitter or Facebook!