2013-03-19 28 views
1

我正在創建一個自定義用戶控件,它將充當搜索功能。我想輕鬆地將它添加到多個頁面,而無需修改很多代碼。ASP.Net Post用戶控件Post到新頁面

我認爲最好的方法是創建一個簡單的用戶控件,我可以在任何地方用一行代碼注入,然後將此控件回發到不同的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. 

有沒有更好的辦法做到這一點,或者我應該如何修復我的代碼?謝謝!

+1

將文本框值作爲查詢字符串傳遞給myPostBack.aspx頁面如何? – 2013-03-19 11:43:41

+0

你應該看看OnClosing()以及 – Brandon 2013-03-19 11:49:21

+0

我想這可以適用於這種情況,因爲我只是檢索數據。我仍然想知道如何發佈到另一個頁面。 – jpsnow72 2013-03-19 11:59:12

回答

1

我不知道TextBox是在哪裏聲明的,例如,如果您使用MasterPages,那麼NamingContainer就是主人的ContentPlaceHolder而不是Page。因此只投了PreviousPage屬性的正確類型:

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

你必須提供一個公共屬性,因爲TextBox保護(最佳實踐反正):

public string SearchText 
{ 
    get { return searchTextBox.Text; } 
} 
+0

TextBox在我的ascx用戶控件中聲明。我在Master Pages中工作,但用戶控件只是添加到另一個頁面的ContentPlaceHolder中。 – jpsnow72 2013-03-19 11:52:26

+0

當試圖這樣做時,'searchTextBox'沒有定義 – jpsnow72 2013-03-19 11:53:42

+0

@ jpsnow72:是的,因爲它在'UserControl'中,而不在頁面本身。我假設'NamingContainer'是'UserControl',但是在這種情況下這並不會有多大幫助,因爲您想在不同的頁面上使用該控件。你可以試着從['Request.Form'變量](http://msdn.microsoft.com/en-us/library/system.web.httprequest.form(v = vs.110).aspx)儘管這會很麻煩。 – 2013-03-19 12:04:47

0

我測試你的代碼,上一頁爲空。嘗試切換到頁面