我已经查看了几个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;
}
}
唯一的问题是输入的搜索框文本没有被保留。
答案 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>
<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;