2

isSearchingWeb アプリケーションの「関数」ファイルに単一のブール値プロパティを持つクラスがあります。検索ページで、変数oSearchHandlerとして宣言されたPublic Shared変数があります。oSearchHandlerWeb アプリケーションの他のページのコンテンツにアクセスするにはどうすればよいですか?

セッションを使用したコード....

'search.aspx
Public Function oSearchString(ByVal oTextBoxName As String) As String
    For Each oKey As String In Request.Form.AllKeys
        If oKey.Contains(oTextBoxName) Then
            Session.Add("searching", True)
            Session.Add("search-term", Request.Form(oKey))
            Return Request.Form(oKey)
        End If
    Next
    Return ""
End Function

'theMaster.master
<%
If Session("searching") Then
%><ul style="float: right;">
    <li>
        <div class="gsSearch">
            <asp:TextBox ID="searchbox" runat="server"></asp:TextBox>
        </div>
    </li>
    <li>
        <div class="gsSearch">
            <asp:Button ID="searchbutton" runat="server" Text="search" UseSubmitBehavior="true" PostBackUrl="search.aspx" CssClass="searchBtn" />
        </div>
    </li>
</ul>
<%
End If
%>

セッションはうまくいくと思います。

4

2 に答える 2

2

ページ インタラクション間でこれらの変数にアクセスすることについて話している場合は、状態がページ間で破棄されることに注意する必要があります。

代わりに、このデータをセッション状態に保存する必要があります。

ページ間のやり取りではなく、コードの他の部分からデータにアクセスするだけの場合、重要なのは、ASP.NET ページがクラスになり、パブリック共有変数 (そのクラスの静的プロパティ) になることです。

したがって、PageName.oSearchHandler を使用して別の場所からアクセスします。

[編集] oSearchHandler とは何か、またそれをどのように使用するつもりなのかについて、もう少し情報を提供していただけますか? そうすれば、もっと考え抜かれた推奨事項を提供できるかもしれません。

于 2008-11-06T14:09:15.437 に答える
2

複数のページからアクセスできるようにする場合は、個々のページ クラスから取り出して、Application コレクションなど、よりグローバルにアクセスできる場所に配置する必要があります。変数の名前を考えると、0SearchHandler はデリゲートですか? 私は VB.NET や用語についてあまり詳しくありません。

更新: Steve Morgan は、Session コレクションの使用について言及しました。「静的」または「共有」が言及されたとき、私はよりグローバルに考えていました。変数の使用方法に応じて、ユーザーとセッション間で共有される場合は「アプリケーション」を使用でき、1 つのセッションで 1 人のユーザーが使用する場合は「セッション」を使用できます。VB.NET では、どちらも簡単に使用できます。

Session("yourKey") = YourObjectYouWantToSave
Application("yourKey") = YourObjectYouWantToSave

とてもシンプルなもの。

'search.aspx
Public Function oSearchString(ByVal oTextBoxName As String) As String
    For Each oKey As String In Request.Form.AllKeys
        If oKey.Contains(oTextBoxName) Then
            Session("searching") = True
            Session("search-term") =  Request.Form(oKey)
            Return Request.Form(oKey)
        End If
    Next
    Return ""
End Function
' theMaster.master.vb
In PageLoad Method:
...
Dim bSearching as Boolean
bSearching = IIf(Session("searching") is Nothing, False, Session("searching") )

ulSearch.visible = bSearching
...

'theMaster.master
<ul style="float: right;" runat="server" id="ulSearch">
    <li>
        <div class="gsSearch">
            <asp:TextBox ID="searchbox" runat="server"></asp:TextBox>
        </div>
    </li>
    <li>
        <div class="gsSearch">
            <asp:Button ID="searchbutton" runat="server" Text="search" UseSubmitBehavior="true" PostBackUrl="search.aspx" CssClass="searchBtn" />
        </div>
    </li>
</ul>

わかりました、それはいくつかの余分なコードですが、問題は少ないと思います. さらに、私のVBは少し錆びています。実際、マスターページが使用するページである場合、変数をそのマスターページのパブリックプロパティとして配置します。this.Master でページ マスター ページにアクセスできます (少なくとも C# では、VB.NET では Me.Master だと思います)。

于 2008-11-06T14:11:52.997 に答える