将主页中用户控件的数据传递到内容页面

时间:2014-06-26 23:08:20

标签: asp.net webforms user-controls master-pages

我已经查看了几个similar questions,现在我正在尝试使用FindControl方法,但没有成功。

我的Web窗体应用程序有几个母版页。所有母版页的共同点是顶部的导航用户控件中的搜索框和按钮。我正试图获取在SearchResults页面上输入的搜索词:

HtmlGenericControl topNavDiv = (HtmlGenericControl)Master.FindControl("topNavDiv");
Control topNav = (UserControl)Page.FindControl("topNav");
if (topNav != null)
{
    TextBox searchBox = topNav.FindControl("searchBox") as TextBox;
    if (searchBox != null)
    {
        Response.Write(searchBox.Text.Trim());
    }
    else
    {
        resultsPanel.Visible = false;
        messagePanel.Visible = true;
     }
}

在第一行中,topNavDiv变量为null。我正在考虑通过母版页属性访问用户控件,但有几个不同的母版页我不知道如何确定母版页的ID,因为搜索可以从网站的任何地方发起...

更新

我能够按如下方式获取topNav div,searchBox文本框:

Control topNav = (UserControl)Master.FindControl("topNav");
if (topNav != null)
{
    TextBox searchBox = topNav.FindControl("searchBox") as TextBox;
    if (!String.IsNullOrEmpty(searchBox.Text))
    {
        Response.Write(searchBox.Text.Trim());
    }
    else
    {
        resultsPanel.Visible = false;
        messagePanel.Visible = true;
    }
}

唯一的问题是输入的搜索框文本没有被保留。

2 个答案:

答案 0 :(得分:0)

由于这是一个Intranet站点,我能够利用查询字符串参数来获取搜索词,如下所示:

使用搜索框用户控件导航:

<ul class="navbar-form navbar-left">
    <li>
        <asp:TextBox ID="searchBox" class="form-control col-lg-8" 
            placeholder="Search" runat="server"></asp:TextBox>&nbsp;                  
        <asp:Button ID="searchButton" CssClass="btn btn-warning" Text="Search"
            runat="server" OnClick="searchButton_Click" />
    </li> 
</ul>

用户控制代码 - 背后:

protected void searchButton_Click(object sender, EventArgs e)
{
    Response.Redirect("~/Search/SearchResults.aspx?term="+searchBox.Text.Trim());
}

搜索结果页面代码 - 背后:

if (!Page.IsPostBack)
{
    if (!String.IsNullOrEmpty(Request.QueryString["term"]))
    {
        term = Request.QueryString["term"].ToString();
        Response.Write(term);
    }
    else
    {
        resultsPanel.Visible = false;
        messagePanel.Visible = true;
    }
}

我真正想知道的是,如果以编程方式在页面代码中确定请求页面母版页的标识吗?

答案 1 :(得分:0)

如果由于某种原因需要将数据保留在查询字符串之外,可以使用MasterPage.cs文件中的属性。

public string SearchTerm
{
    get
    {
        return searchBox.Text;
    }
}

然后你可以在任何需要的地方使用它:

MasterPage master = (MasterPage)this.Master;
master.SearchTerm;