Populate a combo with an array

Discussion in 'ASP General' started by Lukelrc, May 19, 2004.

  1. Lukelrc

    Lukelrc Guest

    Hi,

    I have an array - ListOfFiles - that i want use to populate an combo.

    I've attempted to do it like this

    <select name="txtAvailable" rows="4" id="txtAvailable">
    <Script Language = "vbscript" Runat = "Server">
    For i = 0 to Count -1
    Response.Write"<OPTION>" & ListOfFiles(i) & "</OPTION>"
    next
    </script></select>

    I placed the vbscript in the approprate place in the body. But when i
    open the page instead of writing the HTML where i placed the code, it
    has appended it right at the bottom of the page. Does anyone know
    where i'm going wrong or if there's a better way of doing this?

    Thanks

    Luke
     
    Lukelrc, May 19, 2004
    #1
    1. Advertising

  2. Lukelrc

    Ray at Guest

    When things appear on the page where you don't expect them to, this is often
    because of some poorly written HTML, not code. Example:

    <table border="1">
    <tr>
    <td>XXX</td>
    YYY
    </tr>
    </table>

    The YYY will appear at the top of the page (in IE, anyway), although one may
    expect it to appear in the table.

    Basically, if you're seeing your select with the options in your array, your
    ASP code isn't the problem.

    Ray at work

    "Lukelrc" <> wrote in message
    news:...
    > Hi,
    >
    > I have an array - ListOfFiles - that i want use to populate an combo.
    >
    > I've attempted to do it like this
    >
    > <select name="txtAvailable" rows="4" id="txtAvailable">
    > <Script Language = "vbscript" Runat = "Server">
    > For i = 0 to Count -1
    > Response.Write"<OPTION>" & ListOfFiles(i) & "</OPTION>"
    > next
    > </script></select>
    >
    > I placed the vbscript in the approprate place in the body. But when i
    > open the page instead of writing the HTML where i placed the code, it
    > has appended it right at the bottom of the page. Does anyone know
    > where i'm going wrong or if there's a better way of doing this?
    >
    > Thanks
    >
    > Luke
     
    Ray at, May 19, 2004
    #2
    1. Advertising

  3. Lukelrc wrote:
    >
    > <select name="txtAvailable" rows="4" id="txtAvailable">
    > <Script Language = "vbscript" Runat = "Server">
    > For i = 0 to Count -1
    > Response.Write"<OPTION>" & ListOfFiles(i) & "</OPTION>"
    > next
    > </script></select>
    >
    > I placed the vbscript in the approprate place in the body. But when i
    > open the page instead of writing the HTML where i placed the code, it
    > has appended it right at the bottom of the page. Does anyone know
    > where i'm going wrong or if there's a better way of doing this?


    This is an order-of-execution issue (http://aspfaq.com/show.asp?id=2045). If
    you want to interlace server-side scripting with HTML, you will need <% %>
    blocks.

    I usually abstract as much processing as possible before writing any HTML.
    In your case, I would build a single string to represent the entire array...

    FilenameOptionList = CreateOptions(ListOfFiles,"")

    ....then insert it inline:

    <SELECT><%=FilenameOptionList%></SELECT>

    You can define the function anywhere in the script, either in <% %> blocks
    or in <SCRIPT RUNAT="Server"> blocks. Here is a sample function:

    ========================================================================
    Function CreateOptions(byVal A(), byVal DefaultValue)
    Dim i, val
    For i = 0 To UBound(A)
    val = Server.HTMLEncode(A(i))
    If A(i) = DefaultValue Then
    A(i) = "<OPTION VALUE=""" & val & """ SELECTED>" & _
    val & "</OPTION>"
    Else
    A(i) = "<OPTION VALUE=""" & val & """>" & _
    val & "</OPTION>"
    End If
    Next
    CreateOptions = Join(A,vbCrLf)
    End Function
    ------------------------------------------------------------------------

    Note that this example is capable of preselecting the control:

    ... = CreateOptions(ListOfFiles,Request.Form("txtAvailable").Item)


    Lastly, it bears mentioning that in many cases, this abstraction allows you
    to simply use <SELECT><%=CreateOptions(...)%></SELECT>

    More complicated functions can be written to create OPTION lists from 2D
    arrays, wherein the .value and .text properties differ (<OPTION
    VALUE="TN">Tennessee</OPTION>). Either way, this type of function is
    entirely self-contained, so it can be placed into a common include for reuse
    wherever needed.

    If you use JScript on the server side, you can even do something like
    this...

    Array.prototype.toOptions = function(val) {
    for (var i=0,a=[]; i<this.length; i++)
    a = "\r\n<OPTION VALUE=\"" + this +
    (this==val ? "\" SELECTED>" : "\">") +
    this + "</OPTION>"
    return a.join("")
    }

    ....in which case:

    <%=ListOfFiles.toOptions()%>

    would suffice, but:

    <%=ListOfFiles.toOptions(Request.Form("txtAvailable").Item)%>

    works even better, and doesn't require a different method signature.


    --
    Dave Anderson

    Unsolicited commercial email will be read at a cost of $500 per message. Use
    of this email address implies consent to these terms. Please do not contact
    me directly or ask me to contact you directly for assistance. If your
    question is worth asking, it's worth posting.
     
    Dave Anderson, May 19, 2004
    #3
  4. Ray at <%=sLocation%> [MVP] wrote:
    > When things appear on the page where you don't expect them to, this
    > is often because of some poorly written HTML, not code. Example:
    >
    > <table border="1">
    > <tr>
    > <td>XXX</td>
    > YYY
    > </tr>
    > </table>
    >
    > The YYY will appear at the top of the page (in IE, anyway), although
    > one may expect it to appear in the table.
    >
    > Basically, if you're seeing your select with the options in your
    > array, your ASP code isn't the problem.


    That's not correct, Ray. This is clearly an execution order problem. Note
    the RUNAT="server" bit. If the default language is VBScript, that block
    executes last, no matter where it sits in your code.

    The fix is either abstraction or <%%> blocks.



    --
    Dave Anderson

    Unsolicited commercial email will be read at a cost of $500 per message. Use
    of this email address implies consent to these terms. Please do not contact
    me directly or ask me to contact you directly for assistance. If your
    question is worth asking, it's worth posting.
     
    Dave Anderson, May 19, 2004
    #4
  5. Lukelrc

    Ray at Guest

    "Dave Anderson" <> wrote in message
    news:...
    > > Basically, if you're seeing your select with the options in your
    > > array, your ASP code isn't the problem.

    >
    > That's not correct, Ray. This is clearly an execution order problem. Note
    > the RUNAT="server" bit.


    Oh yeah. Thanks Dave. Studying FAQ 2045 again now. :]

    Ray at work
     
    Ray at, May 19, 2004
    #5
  6. Lukelrc

    Luke Curtis Guest

    Thanks for all your help.

    I have created a string as suggested FileNameoptionlist, which is fine.

    Ive checked out about the execution order, but i cant see what exactly
    the problem is. What is strange is that if i script:

    <script language="vbscript"
    Runat="server">Response.write(filenameOptionList)</script>

    in either the head or the body, it produces the correct HTML but still
    apended at the end - which does suggest an execution order problem, but
    if i simply write:

    <% response.write(Filenameoptionlist)%>

    or

    <% =filenameoptionlist%>

    I get nothing at all!

    Does anyone know why this might be?
    Thanks in advance.

    Luke



    *** Sent via Developersdex http://www.developersdex.com ***
    Don't just participate in USENET...get rewarded for it!
     
    Luke Curtis, May 20, 2004
    #6
  7. Lukelrc

    Lukelrc Guest

    Thanks for all your help.

    I have created a string as suggested FileNameoptionlist, which is fine.

    Ive checked out about the execution order, but i cant see what exactly
    the problem is. What is strange is that if i script:

    <script language="vbscript"
    Runat="server">Response.write(filenameOptionList)</script>

    in either the head or the body, it produces the correct HTML but still
    apended at the end - which does suggest an execution order problem, but
    if i simply write:

    <% response.write(Filenameoptionlist)%>

    or

    <% =filenameoptionlist%>

    I get nothing at all!

    Does anyone know why this might be?
    Thanks in advance.

    Luke
     
    Lukelrc, May 20, 2004
    #7
  8. Lukelrc

    Ray at Guest

    What about:

    <% Response.WRite "Here is the filenameoptionslist: " & Filenameoptionlist
    %>

    Ray at work

    "Lukelrc" <> wrote in message
    news:...
    > Thanks for all your help.
    >
    > I have created a string as suggested FileNameoptionlist, which is fine.
    >
    > Ive checked out about the execution order, but i cant see what exactly
    > the problem is. What is strange is that if i script:
    >
    > <script language="vbscript"
    > Runat="server">Response.write(filenameOptionList)</script>
    >
    > in either the head or the body, it produces the correct HTML but still
    > apended at the end - which does suggest an execution order problem, but
    > if i simply write:
    >
    > <% response.write(Filenameoptionlist)%>
    >
    > or
    >
    > <% =filenameoptionlist%>
    >
    > I get nothing at all!
    >
    > Does anyone know why this might be?
    > Thanks in advance.
    >
    > Luke
     
    Ray at, May 20, 2004
    #8
  9. Lukelrc

    Roland Hall Guest

    "Lukelrc" wrote in message
    news:...
    : I have an array - ListOfFiles - that i want use to populate an combo.
    : I've attempted to do it like this
    :
    : <select name="txtAvailable" rows="4" id="txtAvailable">
    : <Script Language = "vbscript" Runat = "Server">
    : For i = 0 to Count -1
    : Response.Write"<OPTION>" & ListOfFiles(i) & "</OPTION>"
    : next
    : </script></select>
    :

    Untested, just written here...

    <%
    Dim Count
    Count = ubound(ListOfFiles())

    sub prt(str)
    Response.Write(str & vbCrLf)
    end sub

    sub lprt(str)
    Response.Write(str & "<br />" & vbCrLf)
    end sub

    sub popList()
    prt("<select name=""txtAvailable"" rows=""4"" id=""txtAvailable"">")
    for i = 0 to Count - 1
    prt("<option value=""" & ListOfFiles(i) & """>" & ListOfFiles(i) &
    "</option>")
    next
    prt("</script>")
    end sub

    lprt("Check out my list of files...")
    popList
    %>

    HTH...

    --
    Roland Hall
    /* This information is distributed in the hope that it will be useful, but
    without any warranty; without even the implied warranty of merchantability
    or fitness for a particular purpose. */
    Technet Script Center - http://www.microsoft.com/technet/scriptcenter/
    WSH 5.6 Documentation - http://msdn.microsoft.com/downloads/list/webdev.asp
    MSDN Library - http://msdn.microsoft.com/library/default.asp
     
    Roland Hall, May 20, 2004
    #9
  10. Lukelrc

    Lukelrc Guest

    I've sorted it. When i had written the script that populated the
    string i had open and closed script tags several times. Putting all of
    the code into one set of tags sorted it. Thanks for your help.



    Luke
     
    Lukelrc, May 21, 2004
    #10
  11. Lukelrc

    Roland Hall Guest

    "Lukelrc" wrote in message
    news:...
    : I've sorted it. When i had written the script that populated the
    : string i had open and closed script tags several times. Putting all of
    : the code into one set of tags sorted it. Thanks for your help.

    Glad to hear it's working for you Luke. (O:=
     
    Roland Hall, May 22, 2004
    #11
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Mark Goldin

    Code to populate combo

    Mark Goldin, Aug 3, 2004, in forum: ASP .Net
    Replies:
    2
    Views:
    373
    Kevin Spencer
    Aug 3, 2004
  2. Joyce
    Replies:
    0
    Views:
    570
    Joyce
    Mar 1, 2005
  3. Adrian
    Replies:
    1
    Views:
    240
    Bullschmidt
    Feb 18, 2004
  4. dthmtlgod

    Fill Combo Box based on another Combo Box

    dthmtlgod, Nov 16, 2005, in forum: ASP General
    Replies:
    1
    Views:
    610
    Bob Barrows [MVP]
    Nov 16, 2005
  5. SM
    Replies:
    2
    Views:
    392
Loading...

Share This Page