When you think ASP, think...
Recent Articles
All Articles
ASP.NET Articles
Related Web Technologies
User Tips!
Coding Tips

Sample Chapters
JavaScript Tutorials
MSDN Communities Hub
Official Docs
Stump the SQL Guru!
XML Info
Author an Article

The 4 Guys Present: ASPFAQs.com

Jump to a FAQ
Enter FAQ #:
..or see our 10 Most Viewed FAQs.

4GuysFromRolla.com : ASP FAQS : Forms


How can I retrieve the fields in my form in the order they appear in the form?

[Print this FAQ]

Answer: If you simply do

For Each Item In Request.Form
fieldName = Item
fieldValue = Request.Form(Item)
    ...do something with fieldName and fieldValue...

you usually will not see the form fields appear in the order in which you placed them on the form. (If they do appear in order, either the form was very small or you got very lucky.)

The only reliable way to retrieve the form fields in order works like this:

For ix = 1 to Request.Form.Count
    fieldName = Request.Form.Key(ix)
    fieldValue = Request.Form.Item(ix)
    ...do something with fieldName and fieldValue...

This seems to work up to a certain point (at least 64 form fields, though I have heard reports of up to 256 form fields), at which point even it can break down.

If all you want is a solution, you can quit reading now. If you want to know why this happens, read on...

When you do
you are accessing a VBScript collection. And a "collection" is
actually essentially the same thing as a "Scripting.Dictionary". That is, it is a hash table keyed by the names of the items in the Form.

So when you do
        For each item in Request.Form
you are asking VBScript to traverse the KEYS of the collection, which means you will get the items in whatever order the hashing algorithm stored them in.

So the only way to predict the order is to know what hashing algorithm MS uses for the given collection. But even knowing that would only allow prediction of the order, not specifying the order.

Why does the method shown above work? Because underneath it all, the collection is really sitting on top of a "dynamic array." And when you use the code shown, you are bypassing the upper levels of the collection code and delving down to that array. And you are seeing the items in array order, which just happens to also be form field order. Even this ordering breaks down when the collection needs to "re-hash" the keys, which is why there is an upper limit (sorry I don't know for sure what it is) to the number of form fields that can be retrieved in order via the above code.

FAQ posted by Bill Wilkinson at 10/16/2000 8:51:08 PM to the Forms category. This FAQ has been viewed 88,194 times.

Do you have a FAQ you'd like to suggest? Suggestions? Comments? If so, send it in! Also, if you'd like to be a FAQ Admin (creating/editing FAQs), let me know! If you are looking for other FAQs, be sure to check out the 4Guys FAQ and Commonly Asked Messageboard Questions!

Most Viewed FAQs:

1.) How can I format numbers and date/times using ASP.NET? For example, I want to format a number as a currency. (761643 views)
2.) I am using Access and getting a 80004005 error (or a [Microsoft][ODBC Microsoft Access Driver] The Microsoft Jet database engine cannot open the file '(unknown)' error) when trying to open a connection! How can I fix this problem? (207777 views)
3.) How can I convert a Recordset into an array? Also, how can I convert an array into a Recordset? (202549 views)
4.) How can I quickly sort a VBScript array? (196039 views)
5.) How can I find out if a record already exists in a database? If it doesn't, I want to add it. (156019 views)
6.) How do I display data on a web page using arrays instead of Do...While...MoveNext...???... (152331 views)
7.) When I get a list of all files in a directory via the FileSystemObject, they aren't ordered in any reasonable way. How can I sort the files by name? Or by size? Or by date created? Or... (140381 views)
8.) For session variables to work, must the Web visitor have cookies enabled? (110162 views)
9.) Can I send emails without using CDONTS? (107083 views)
10.) How can I take the result of a SELECT...MULTIPLE or a group of same-named checkboxes and turn it into a query? That is, if the user selects 3 answers, how can I construct a query that looks for all 3? (106308 views)
Last computed at 9/17/2007 3:22:00 AM

ASP.NET [1.x] [2.0] | ASPFAQs.com | Advertise | Feedback | Author an Article