【问题标题】:Passing Data from User Control in Master Page(s) to Content Page将数据从母版页中的用户控件传递到内容页
【发布时间】:2014-06-26 23:08:20
【问题描述】:

我已经查看了几个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 变量为空。我正在考虑通过母版页属性访问用户控件,但是 对于几个不同的母版页,我不知道如何确定母版页的 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;
    }
}

唯一的问题是输入的搜索框文本没有被持久化。

【问题讨论】:

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


【解决方案1】:

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

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

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

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

【讨论】:

  • this.Master 将是搜索结果页面的母版页 - 用户可以从五个母版页中的任何一个输入搜索词,所以不确定这是否可行...
【解决方案2】:

由于这是一个 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;
    }
}

我真正想知道的是,是否可以通过编程方式在页面的代码隐藏中确定请求页面的母版页的身份?

【讨论】:

    猜你喜欢
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多