dポイントプレゼントキャンペーン実施中!

検索画面を作成しております。
検索画面:a.asp
表示画面:b.asp
のような形です。
a.aspからb.aspにPOSTで送信します。
b.aspの表示で検索結果の該当件数が多いときは1ページに表示させる行数を10行くらいにしたいと思っております。
そこで、先頭・前へ・次へ・最終などのリンク(ボタンでも可)を作ります。
この時、各ページへの移動時に「b.asp?xxx=yyy」などの表示にしたくないのですが可能でしょうか?
可能であればどようのうにしたら良いのでしょうか?
送信する情報量が多いのですが、パラメータは送信できる情報量に限界があると聞いたことがあります。

どなたかご教授下さい。
よろしくお願いします。

A 回答 (3件)

お世話になります。



> 1つ目、javascriptをあまり使用した事がないのですが、onclickイベントの時に
> ・fromタグにaction="b.asp"を書き込む
> ・javascript内でdocument.フォーム名.action='b.asp';とする
> これはどちらでも構わないのでしょうか?
前に投稿した時点では、javascript にて hidden フィールドに値を入れるつもりでやってたのですが
今回の方法ではその必要がなくなりました。
ちなみに、どちらでも同じです。

2つ目、3つ目は今回のソースを参考にして下さい。

このソースでやっていることは、ローカルマシンの中にある SQL Server 2000
の NorthWind データベースに接続して、Customers テーブルの値を取得し、
10 件毎に表示をしています。
最初のページになったら前へボタンを使えなくし、
最後のページになったら次へボタンを使えなくしています。
※インデントを表示するため、全角空白 2 つでインデントしています。
 実際に試される場合は 全角空白 2 つを タブなどに置き換えてください。

■paging.asp
<%@ Language=VBScript %>
<%
Option Explicit

Dim connection
Dim rs
Set connection = Server.CreateObject("ADODB.Connection")
connection.Open "Driver={SQL Server};Server=(local);Database=Northwind;Uid=test_sql;Pwd=test_sql;"
Set rs = Server.CreateObject("ADODB.RecordSet")
rs.Open "SELECT TOP 100 CustomerID, CompanyName FROM Customers ", connection, 1, 1
rs.PageSize = 10

Dim pageNumber
If Request.Form("NowPageNumber") = "" Then
  pageNumber = 1
Else
  Dim buttomName
  buttomName = Request.Form("myButton")
  Dim nowPageNumber
  nowPageNumber = CInt(Request.Form("NowPageNumber"))
  
  Select Case buttomName
  Case "先頭"
    pageNumber = 1
  Case "前へ"
    pageNumber = nowPageNumber -1
  Case "次へ"
    pageNumber = nowPageNumber +1
  Case "最終"
    pageNumber = rs.PageSize
  End Select
End If
If pageNumber > 0 Then
  rs.AbsolutePage = pageNumber
End If
%>
<html>
<head>
<title><%=pageNumber %>/<%=rs.PageSize %> ページを表示しています。</title>
</head>
<body>
<%
If pageNumber > 0 Then
  Response.Write("<table border='1'>")
  Response.Write("<tr><th>CustomerID</th><th>CompanyName</th></tr>")
  Dim counter
  counter = 0
  Do Until rs.EOF Or counter >= rs.PageSize
    Response.Write("<tr><td>")
    Response.Write(rs("CustomerID"))
    Response.Write("</td><td>")
    Response.Write(rs("CompanyName"))
    Response.Write("</td></tr>")
    rs.MoveNext()
    counter = counter + 1
  Loop
  Response.Write("</table>")
Else
  Response.Write("データはありません")
End If
rs.Close()
%>
</table>
<form method="post" action="paging.asp">
<input type="hidden" name="NowPageNumber" value=<%=pageNumber %>>
<input type="submit" name="myButton" value="先頭">
<input type="submit" name="myButton" <% If pageNumber = 1 Then Response.Write("disabled=true") %> value="前へ">
<input type="submit" name="myButton" <% If pageNumber = rs.PageSize Then Response.Write("disabled=true") %> value="次へ">
<input type="submit" name="myButton" value="最終">
</form>
</body>
</html>
    • good
    • 0
この回答へのお礼

naganaga_001様 ご回答ありがとうございます。
連絡が遅くなってしまいましたが、無事ページ間の移動を実現させる事ができました。
今回はソースまで提供していただき本当にありがとうございました。大変勉強になりました。
今後ともよろしくお願いします。

お礼日時:2007/04/10 12:40

お世話になります。



> Request("page")がうまく機能していないっぽいです。
それは POST パラメータや GET パラメータでそもそも渡してないからでは。。。

Form タグの中に こんな感じで hidden フィールドをいれて
<input type="hidden" name="page" value="0">
<input type="hidden" name="buttonName" value="">

Form タグの各ボタンから 以下の様な javascript を呼び出せばよいのでは。
<!--
<script type="text/javascript">
function postBack(pageNum, btnName){
document.フォーム名.page.value = pageNum;
document.フォーム名.buttonName.value = btnName;
document.フォーム名.submit();
}
// -->
</script>

ボタンはこんな感じで
<input type="button" value="先頭" onClick="postBack(0, 'start')">

サーバー側の判定ロジックはこんな感じで
If IsNumeric(Request.Form("page")) Then
  If Request.Form("buttonName") = "start" Then
    '先頭ボタンの処理
  Else If Request.Form("buttonName") = "back" Then
    '前へボタンの処理
  End If
End If
    • good
    • 0
この回答へのお礼

naganaga_001様 度々ご回答ありがとうございます。

教えていただいたやり方でチャレンジしてみたのですがダメでした。。
ボタンをクリックするとステータスバーに「ページでエラーが発生しました。」とでます。

いくつか質問させていただいてよろしいでしょうか?
1つ目、javascriptをあまり使用した事がないのですが、onclickイベントの時に
・fromタグにaction="b.asp"を書き込む
・javascript内でdocument.フォーム名.action='b.asp';とする
これはどちらでも構わないのでしょうか?

2つ目、ボタン設置時の話ですが、
<input type="button" value="前へ" onClick="postBack(document.フォーム名.page.value, 'back')">
のような形で現在のページの値を取得する事はできるのでしょうか?
できないのであればどうすればよいのでしょうか?
あと、最終ページの取得方法もわかりません。

3つ目、変更する前まで記述していた「ObjRS.AbsolutePage = page」という行で「引数が間違った型、または許容範囲外であるか、競合しています。」というエラーになります。これは、pageの値が正しく取得できていないからなのでしょうか?

質問ばかりで申し訳ないのですが、よろしくお願いします。

お礼日時:2007/04/07 20:39

お世話になります。



自分の ASP 自身に POST したいという解釈で間違っていなければ
以下のような感じでできますよ。

■postback.asp
<%
If Request.Form("PostBack") <> "" Then
Response.Write("PostBack!!!")
End If
If Request.Form("PostBack2") <> "" Then
Response.Write("PostBack2!!!")
End If
%>
<html>
<head><title>test</title></head>
<body>
<form name="testform" action="postback.asp" method="post">
<input type="submit" name="PostBack" value="PostBack" />
<input type="submit" name="PostBack2" value="PostBack2" />
</form>
</body>
</html>
    • good
    • 0
この回答へのお礼

naganaga_001様 ご回答ありがとうございます。
>自分の ASP 自身に POST したいという解釈で間違っていなければ
>以下のような感じでできますよ。
まさにその通りです。自分自身にPOSTしたかったのです。
naganaga_001様にご教授頂いたおかげで、解決に一歩近づいたのですが、残念ながら私の力不足でまだ解決に至っておりません。

b.aspは表示のみのページなので、formタグのなかにhiddenで値を持たせ送信してみたのですが、ページ移動がうまくいきません。
formタグの中に、以下のような4つのボタンを設置しました。
<input type="submit" name="start" value="先頭">
<input type="submit" name="back" value="前へ">
<input type="submit" name="next" value="次へ">
<input type="submit" name="end" value="最終">

ページの判定は以下のような形にしてみました。
if IsNumeric(Request("page")) Then
page = Cint(Request("page"))
backpage = page - 1
nextpage = page + 1
else
page = 0
end if

if page = 0 or Request.Form("start") <> "" then
page = 1
end if
if page > 1 and Request.Form("back") <> "" Then
page = backpage
end if
if page < ObjRS.PageCount and Request.Form("next") <> "" Then
page = nextpage
end if
if page > ObjRS.PageCount or Request.Form("end") <> "" then
page = ObjRS.PageCount
end if

ObjRS.AbsolutePage = page

Request("page")がうまく機能していないっぽいです。
すいません、アドバイスお願いします。

お礼日時:2007/04/07 11:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています