#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;
}
}