Library tutorials & articles
Implementing HTTP Handlers in ASP.NET
- Introduction
- Creating the Handler
- Handling PostBack
- Redirect, Transfer or Rewrite?
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.
Related articles
Related discussion
-
Profile Class does not work after Translation
by converter2009 (1 replies)
-
what is the SQL Server Provider
by hayperaktib (1 replies)
-
Very Urgent regarding deleting the images from a folder
by Nanosteps (6 replies)
-
Java Script, File uploading on ftp server using java script code
by h_c_a_andersen (2 replies)
-
sharepoint calendar web part with events from sql table
by converter2009 (2 replies)
Related podcasts
-
StackOverflow uses ASP.NET MVC - Jeff Atwood and his technical team
Scott chats with Jeff Atwood of CodingHorror.com and most recently, StackOverflow.com. Jeff and Joel Spolsky and their technical team have created a new class of application using ASP.NET MVC. What works, what doesn't, and how did it all go down?
Events coming up
-
Mar
15
DevWeek 2010
London, United Kingdom
DevWeek is Europe’s leading independent conference for software developers, database professionals and IT architects, and features expert speakers on a wide range of topics, including .NET 4.0, Silverlight 3, WCF 4, Visual Studio 2010, REST, Windows Workflow 4, Thread Synchronization, ASP.NET 4.0, SQL Server 2008 R2, LINQ, Unit Testing, CLR & C# 4.0, .NET Patterns, WPF 4, F#, Windows Azure, ADO.NET, Entity Framework, Debugging, T-SQL Tips & Tricks, and more.
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.
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 ...
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.
thank you very much. I am knew this posting and waiting for nothoing
This thread is for discussions of Implementing HTTP Handlers in ASP.NET.