跨站点ASP.NET共享变量

时间:2008-11-06 14:07:09

标签: asp.net variables

我的webapp中的'functions'文件中有一个类isSearching,其中包含一个布尔属性。在我的搜索页面上,我将变量oSearchHandler声明为Public Shared变量。如何在我的网络应用程序的其他页面上访问oSearchHandler的内容?

会话代码....

'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
%>

我认为会议会很好。

2 个答案:

答案 0 :(得分:2)

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

相反,您需要将此数据存储在会话状态中。

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

因此,您可以使用PageName.oSearchHandler

从其他地方访问它

[编辑]您能否提供一些有关oSearchHandler是什么以及您打算如何使用它的更多信息?那么我们可能会提供更多考虑的建议。

答案 1 :(得分: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)。