2

isSearching我的 web 应用程序的“函数”文件中有一个具有单个布尔属性的类。在我的搜索页面上,我有一个变量oSearchHandler声明为Public Shared变量。如何访问oSearchHandler我的 web 应用程序中其他页面上的内容?

带有会话的代码......

'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

如果您谈论的是在页面交互之间访问这些变量,您需要记住状态在页面之间被丢弃。

相反,您需要将此数据存储在 Session State 中。

如果不是跨页面交互,而只是从代码的其他部分访问数据,那么关键是 ASP.NET 页面变成了一个类,而您的公共共享变量是该类的静态属性。

因此,您可以使用 PageName.oSearchHandler 从其他地方访问它

[编辑] 你能给我们更多关于 oSearchHandler 是什么以及你打算如何使用它的信息吗?那么,我们可能可以提供更深思熟虑的建议。

于 2008-11-06T14:09:15.437 回答
2

如果您希望从多个页面访问它,您应该将其从单个页面类中拉出,并将其放在更全局可访问的位置,例如 Application 集合。给定变量的命名,0SearchHandler 是委托吗?我不太熟悉 VB.NET 或术语。

更新:Steve Morgan 提到使用 Session 集合,当提到“静态”或“共享”时,我的想法更加全球化。根据您使用变量的方式,如果它将在用户和会话之间共享,则可以使用“应用程序”,或者如果它将由一个用户在一个会话中使用,则可以使用“会话”。在 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 回答