1

検索機能として機能するカスタムユーザーコントロールを作成しています。多くのコードを変更することなく、これを複数のページに簡単に追加できるようにしたいと思います。

これを行うための最良の方法は、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を使用する場合、そのはページではなくマスターのものになりますNamingContainerContentPlaceHolderしたがって、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がnullです。ページに切り替えてみてください。

于 2013-03-19T11:51:53.687 に答える