使用c#从母版页获取文本框值

时间:2011-10-12 10:32:13

标签: c# asp.net master-pages

我有一个位于母版页上的搜索文本框,如下所示:

<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 && PreviousPage.IsCrossPagePostBack)
        {
            Page previousPage = PreviousPage;
            TextBox tbSearch = (TextBox)PreviousPage.Master.FindControl("frmSearch");
            searchValue.Text = tbSearch.Text;

            //more code here...
        }

一切都很棒。但是如果你在search.aspx上实际输入一个值,那显然不是前一页。我怎样才能绕过这个死胡同呢?

3 个答案:

答案 0 :(得分:2)

如果您在页面指令中使用@MasterType,那么您将拥有一个强类型的母版页,这意味着您可以访问公开的属性,控件等,而无需执行查找:

<%@ 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)

您只需要:

TextBox tbSearch = (TextBox)PreviousPage.Master.FindControl("frmSearch");
searchValue.Text = tbSearch.Text;

无需担心'上一页'是什么。

正如@DisDisappointment所说,你应该看看strongly-typed access

答案 2 :(得分:0)

这是一个解决方案(但我现在认为它已经过时了):

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