1

我正在创建一个将充当搜索功能的自定义用户控件。我希望能够轻松地将其添加到多个页面,而无需修改太多代码。

我认为最好的方法是创建一个简单的用户控件,我可以用一行代码在任何地方注入,然后将此控件回发到不同的 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.

有没有更好的方法来做到这一点,或者我应该如何修复我的代码?谢谢!

4

2 回答 2

1

我不知道在哪里TextBox声明,例如,如果您使用 MasterPages NamingContainer,它将是ContentPlaceHoldermaster 而不是 Page。因此只需将PreviousPage属性转换为正确的类型:

YourPageType page = PreviousPage as YourPageType;
if(page != null)
{
    content.InnerHtml = page.SearchText;
}

由于受保护,您必须提供公共财产TextBox(无论如何都是最佳实践):

public string SearchText
{
    get {  return searchTextBox.Text;  }
} 
于 2013-03-19T11:45:48.967 回答
0

我测试了你的代码,PreviousPage为空。尝试切换到Page

于 2013-03-19T11:51:53.687 回答