Получить значение текстового поля из Masterpage с помощью c#

#c# #asp.net #master-pages

#c# #asp.net #мастер-страницы

Вопрос:

У меня есть текстовое поле поиска, расположенное на главной странице следующим образом:

 <asp:TextBox ID="frmSearch" runat="server" CssClass="searchbox"></asp:TextBox>
<asp:LinkButton ID="searchGo" PostBackUrl="search.aspx"  runat="server">GO</asp:LinkButton>
  

Код для страницы поиска содержит следующее, чтобы получить значение текстового поля (фрагмент):

 if (PreviousPage != null amp;amp; PreviousPage.IsCrossPagePostBack)
        {
            Page previousPage = PreviousPage;
            TextBox tbSearch = (TextBox)PreviousPage.Master.FindControl("frmSearch");
            searchValue.Text = tbSearch.Text;

            //more code here...
        }
  

Все отлично работает. НО не в том случае, если вы вводите значение, фактически находясь в search.aspx, что, очевидно, не является предыдущей страницей. Как я могу обойти этот тупик, в который я себя загнал?

Ответ №1:

Если вы используете директиву @MasterType in the page, то у вас будет строго типизированная главная страница, что означает, что вы можете получить доступ к открытым свойствам, элементам управления и так далее без необходимости поиска:

 <%@ MasterType VirtualPath="MasterSourceType.master" %>

searchValue.Text = PreviousPage.Master.frmSearch.Text;
  

РЕДАКТИРОВАТЬ: чтобы немного расширить ваше воображение, рассмотрим чрезвычайно простое свойство, предоставляемое главной страницей:

 public string SearchQuery 
{
    get { return frmSearch.Text; }
    set { frmSearch.Text = value; }
}
  

Затем, без какой-либо изобретательности, можно увидеть, что мы можем получить к нему доступ следующим образом:

 searchValue.Text = PreviousPage.Master.SearchQuery;
  

Или,

 PreviousPage.Master.SearchQuery = "a query";
  

Комментарии:

1. 1 — Правильно Я делал это при работе с веб-формами и нашел это достаточно удобным, чтобы немного написать об этом

2. Я бы не стал воспринимать это так буквально; вы можете предоставить string свойство, которое может get и / или set текст частного элемента управления.

3. Я обновил свой ответ, надеюсь, это должно быть достаточно просто.

4. спасибо за вашу помощь и терпение. Я очень новичок в .net, и копейки еще не упали.

Ответ №2:

Вот решение (но я думаю, что оно уже старое):

     {
        if (PreviousPage == null)
        {
            TextBox tbSearch = (TextBox)Master.FindControl("txtSearch");
            searchValue.Value = tbSearch.Text;
        }
        else
        {
            TextBox tbSearch = (TextBox)PreviousPage.Master.FindControl("txtSearch");
            searchValue.Value = tbSearch.Text;             
        }
    }