私はいくつかのレガシーコードをリファクタリングしています。アプリはクエリ文字列を使用していませんでした。以前の開発者は、アプリが他の場所で使用するいくつかの変数をハードコーディングしていました。
このようにVB.NETを使用して
so.Cpage = "ContractChange.aspx"
私の質問は、この値をプログラムで設定して現在のクエリ文字列を含めることができるかどうかです。
が欲しいです so.Cpage
はContractChange.aspx?d=1&b=2
リクエストオブジェクトなどでこれを行うことはできますか?注、ドメインは必要ありません。
これを試して:
so.Cpage = "ContractChange.aspx?" & Request.RawUrl.Split("?")(1)
現在のクエリ文字列を取得するには、次のようにします。
Dim query as String = Request.QueryString("d")
これにより、 "d"クエリ文字列の値が文字列変数 "query"に割り当てられます。すべてのクエリ文字列値は文字列であるため、数値を渡す場合は、これらの文字列値を「キャスト」または数値に変換する必要があります(ただし、キャスト時の例外に注意してください)。例えば:
Dim query as String = Request.QueryString("d")
Dim iquery as Integer = CType(query, Integer)
RequestオブジェクトのQueryStringプロパティは、名前/値のキーペアのコレクションです。具体的には、System.Collections.Specialized.NameValueCollection型であり、名前と値の各ペアを次のように反復できます。
Dim coll As System.Collections.Specialized.NameValueCollection = Request.QueryString
Dim value As String
For Each key As String In coll.AllKeys
value = coll(key)
Next
これらのメカニズムのいずれか(または非常によく似たもの)を使用すると、移動先の完全なURL(ページとクエリ文字列)を含む文字列変数を作成できます。
VB.Netでは、次のようにしてそれを行うことができます。
Dim id As String = Request.Params("RequestId")
これを整数として処理する場合は、次の操作を実行できます。
Dim id As Integer
If Integer.TryParse(Request.Params("RequestId"), id) Then
DoProcessingStuff()
End If
これを試して
Dim name As String = System.IO.Path.GetFileName(Request.ServerVariables("SCRIPT_NAME"))
Dim qrystring As String = Request.ServerVariables("QUERY_STRING")
Dim fullname As String = name & "/" & qrystring
VB.NETの構文については不明ですが、C#では次のようにするだけです。
string id = Request.QueryString.Get( "d");
お役に立てれば。