0

3 つのラジオ ボタンを追加しました。これらのボタンで、ASP クラシック ページに表示されるデータのリストを並べ替えます。データはデータベースから取得されます。以下のコードは、この並べ替えを行うためにこれまでに取得したものですが、完了することができませんでした。まず、ページまたはリストを更新する onSelect 送信オプションを取得し (リストを更新する方がよいでしょう)、ユーザーが選択した順序に応じてリストを並べ替えたいと思います。

ラジオボタンのコード

<form method=get action=featuredvehicle.asp>
  <input type="radio" name="sort" value="make">Make<br>
  <input type="radio" name="sort" value="model">Model<br>
  <input type="radio" name="sort" value="model_year">Model Year
</form>

ラジオボタンから値を取得するためのコード

<%
Dim strSQL1
Dim OrderList
OrderList = Request.QueryString("sort")
If OrderList = "" Then
strSQL1 = "SELECT * FROM featuredvehicles ORDER by make, model, model_year asc;"
ElseIf OrderList = make THEN
strSQL1 = "SELECT * FROM featuredvehicles ORDER by make, model, model_year asc;"
ElseIf OrderList = model THEN
strSQL1 = "SELECT * FROM featuredvehicles ORDER by model, model, model_year asc;"
rsLogbook.Open strSQL1, adoCon
ElseIf OrderList = model_year THEN
strSQL1 = "SELECT * FROM featuredvehicles ORDER by model_year, make, model asc;"
END IF
rsLogbook.Open strSQL1, adoCon
%>

データベースからリストをリストするためのコード。

<blockquote>

<% rsLogbook.Movefirst
do while not rsLogbook.EOF %>  
    <p align="left" style="margin-top: 0; margin-bottom: 0"><font face="Tahoma" size="2" color="#5A87B4">
    <img border="0" src="images/obdkey_icon.gif"><a href="http://websitelink.com?vehicle=<%Response.Write(rsLogbook("id"))%>">
    <%=rsLogbook("make")%>&nbsp;<%=rsLogbook("model")%>&nbsp;<%=rsLogbook("model_year")%></a>
       <%Response.Write("<br />") %>
<% rsLogbook.MoveNext%></font></p>
<%loop %>  
</blockquote>

もう一度やりたいことは、

  1. ラジオボタンの送信オプションを選択する
  2. ラジオ ボタンから選択した値を取得し、それに応じてリストを並べ替えます (リストを更新するか、必要なその他の方法で)。
4

1 に答える 1

0

クエリとリストを単一のコード ブロックにすることをお勧めします。出力部分文字列とレコード フィールドを連結し、行全体を 1 つのresponse.write命令で書き込みます。

<blockquote>
<%
Dim strSQL1
Dim OrderList
OrderList = Request.QueryString("sort")
strSQL1 = "SELECT * FROM featuredvehicles ORDER BY "
Select Case OrderList
  Case "", make   : strSQL1 = strSQL1 & "make, model, model_year ASC;"
  Case model      : strSQL1 = strSQL1 & "model, make, model_year ASC;"
  Case model_year : strSQL1 = strSQL1 & "model_year, make, model ASC;"
End Select
rsLogbook.Open strSQL1, adoCon

rsLogbook.Movefirst
do while not rsLogbook.EOF
  response.write "<p align=""left"" style=""margin-top: 0; margin-bottom: 0""><font face=""Tahoma"" size=""2"" color=""#5A87B42"">" _
    & "<img border=""0"" src=""images/obdkey_icon.gif""><a href=""http://websitelink.com?vehicle=" & rsLogbook("id") & """>" _
    & rsLogbook("make") & "&nbsp;" & rsLogbook("model") & "&nbsp;" & rsLogbook("model_year") & "</a><br /></font></p>"
  rsLogbook.MoveNext</font></p>
loop
%>
</blockquote>

とはいえ、データがあまり頻繁に変更されず、ユーザーがその場で結果セットの順序を変更できるようにしたい場合は、データベースに対して (異なるORDER BY句を使用して) クエリを繰り返し実行しないでください。これにより、Web サーバーとデータベースの両方に過度の負荷がかかります。

このシナリオでは、結果セットを 1 回だけ (順序なしまたはデフォルトの順序で) 取得し、クライアント側の JavaScript フレームワーク (例: jQuery ) を使用して、その後の結果の (再) 順序付けを行う方がよいでしょう。

于 2013-05-01T12:08:56.793 に答える