Совместное использование переменной на сайте ASP.NET - PullRequest
2 голосов
/ 06 ноября 2008

У меня есть класс isSearching с одним логическим свойством в файле 'functions' в моем веб-приложении. На моей странице поиска у меня есть переменная 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 ]

2 голосов
/ 06 ноября 2008

Если вы хотите, чтобы он был доступен с нескольких страниц, вы должны извлечь его из этого отдельного класса страниц и поместить в более глобально доступное место, такое как коллекция приложений. Учитывая наименование переменной, является ли 0SearchHandler делегатом? Я не так хорошо знаком с VB.NET или терминологией.

Обновление: Стив Морган упомянул об использовании коллекции 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 немного ржавый. На самом деле, если главной страницей является страница, на которой вы будете ее использовать, я бы поместил переменную в качестве открытого свойства на этой главной странице. Вы можете получить доступ к главной странице страниц с помощью этого .Master (по крайней мере, в C #, я думаю, что это Me.Master в VB.NET).

2 голосов
/ 06 ноября 2008

Если вы говорите о доступе к этим переменным между взаимодействиями страниц, вы должны иметь в виду, что состояние отбрасывается между страницами.

Вместо этого вам необходимо сохранить эти данные в состоянии сеанса.

Если речь идет не о взаимодействиях страниц, а просто о доступе к данным из других частей кода, ключом является то, что страница ASP.NET становится классом, а ваша общедоступная общая переменная - статическим свойством этого класса.

Таким образом, вы получите доступ к нему из других источников, используя PageName.oSearchHandler

[ПРАВИТЬ] Можете ли вы дать нам больше информации о том, что такое oSearchHandler и как вы собираетесь его использовать? Вероятно, мы можем предложить более продуманную рекомендацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...