我正在创建一个自定义用户控件,它将充当搜索功能。我希望能够轻松地将其添加到多个页面,而无需修改太多代码。
我认为最好的方法是创建一个简单的用户控件,我可以使用一行代码注入任何地方,然后将此控件回发到不同的URL。因此,无论搜索功能在何处,它都将始终回发到同一页面。我的控件看起来像这样:
<asp:TextBox ID="searchTextBox" runat="server" MaxLength="350"></asp:TextBox>
<asp:Button ID="submit" runat="server" Text="Search" PostBackUrl="~/myPostBackPage.aspx" />
myPostBackPage.aspx.cs看起来像这样,但它没有抓取文本。
protected void Page_Load(object sender, EventArgs e)
{
content.InnerHtml = ((TextBox)PreviousPage.FindControl("searchTextBox")).Text;
}
但它没有从searchTextBox字段中提取任何内容而我得到:
Object reference not set to an instance of an object.
有更好的方法可以做到这一点,或者我应该如何修复我的代码?谢谢!
答案 0 :(得分:1)
我不知道TextBox
的声明位置,如果您使用的是MasterPages,则NamingContainer
的{{1}}将是主页的ContentPlaceHolder
而不是Page。因此,只需将PreviousPage
属性转换为正确的类型:
YourPageType page = PreviousPage as YourPageType;
if(page != null)
{
content.InnerHtml = page.SearchText;
}
您必须提供公共财产,因为TextBox
受到保护(无论如何最佳做法):
public string SearchText
{
get { return searchTextBox.Text; }
}
答案 1 :(得分:0)
我测试了您的代码, PreviousPage 为空。尝试切换到页面。