我有一個列表框控件。當用戶點擊它時,它會告訴自定義控件使用某個ID來使用。解決視圖狀態/命名空間衝突
自定義控件每次(動態)繪製相同的東西,只是根據這個ID加載不同的內容(它從數據庫加載到控件等動態表單中)。
好吧,現在我在查看狀態溢出時遇到了麻煩。當你點擊列表框加載說ID#1時,它會看起來很好。然後,您單擊ID#2,並且在自定義控件中創建的所有文本框控件都具有放入ID#1的相同內容。所以當列表框索引發生變化時,我需要清除視圖狀態,但是我無法使其工作。
所有的控件都是在Page_Load中創建的。
我試過Page_Load的ViewState.Clear(),但是沒有做任何事情。
我有從INamingInterface派生的自定義控件,但我猜ID仍然匹配viewstate。我試過改變自定義控件ID爲獨特的東西(如「CONROL _」+ id.ToString())我也試着做與包含自定義控件面板相同的事情。
我似乎無法擺脫這種觀點狀態!
編輯 確定這裏是代碼演示該問題
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (ddl.SelectedValue == "1")
{
Create("ID #1");
}
else if (ddl.SelectedValue == "2")
{
Create("ID #2");
}
}
void Create(string text)
{
TextBox t = new TextBox();
t.Text = text;
pnl.Controls.Add(t);
}
}
標記:
<div>
<asp:Panel ID="pnl" runat="server">
<asp:DropDownList ID="ddl" runat="server" AutoPostBack="True">
<asp:ListItem Text="id 1" Value="1">
</asp:ListItem>
<asp:ListItem Text="id 2" Value="2"></asp:ListItem>
</asp:DropDownList>
</asp:Panel>
</div>
如果你運行這段代碼,你會發現,如果你改變什麼是在文本框和那麼你改變下拉列表,那麼你之前輸入的內容將保留在那裏而不是被覆蓋。
我的基本目標是得到它,所以當你改變ID#2時,它會把「ID#2」放在文本框中,不管怎樣(最好不要禁用視圖狀態)
你可以添加一些代碼來說明我們你的問題? – 2009-10-29 16:56:15
這對你有幫助嗎? – Earlz 2009-10-29 18:14:32