2011-05-13 101 views
0

我有一個asp頁面,其中控件是從Page_Init()上的數據庫動態添加的() EnableViewState設置爲false。Asp.Net動態控件回發

其中一個動態控件是CheckBox,當它被選中時會導致回發。

現在在Page_Init我重新填充我的頁面(根據規則更改後),複選框的checked屬性現在爲false。

從我所看到的它始終保持false到LoadPageStateFromPersistenceMedium()的末尾。

protected override object LoadPageStateFromPersistenceMedium() 
{ 
    Control cntrl = Page.FindControl("FINS10CopyAddress"); 
    Boolean check = ((CheckBox)cntrl).Checked; 
    return null; 
} 

然後在OnPreLoad()上突然又變爲真。

protected override void OnPreLoad(EventArgs e) 
    { 
    Control cntrl = Page.FindControl("FINS10CopyAddress"); 
    Boolean check = ((CheckBox)cntrl).Checked; 
    } 

如果我對另一個控件的visible屬性做了同樣的操作,

任何想法是什麼會導致這種或建議的方法覆蓋不加載以前的狀態?

下面的答案幫助我創建一個解決方法:

dataValue cntrl = ((Helper)Session["helper"]).Event.Control(Request["__EVENTTARGET"]); 
if (cntrl != null) 
{ 
    if (cntrl is webCheckBox) 
     ((CheckBox)Page.FindControl(Request["__EVENTTARGET"])).Checked = (Boolean)cntrl.Value; 
} 
+1

這聽起來完全像viewstate正在填充你的控件。你有沒有在調試模式下檢查你的viewstate對象,以確保viewstate沒有加載?兩種方法中的 – 2011-05-13 05:26:47

+1

ViewState.Count = 0。 – DeWet 2011-05-13 05:31:35

回答

0

編輯

它是回傳數據設定的控制,在LoadPageStateFromPersistenceMedium()看到:

var val = Request[Request["__EVENTTARGET"]]; 

不幸請求對象爲只讀

我不知道任何其他方式來阻止它將值設置爲在客戶端更改的值,除非在設置postbackdata後將值設置爲LoadPageStateFromPersistenceMedium()中的值。

+0

請求不能被指定爲只讀。但是是 請求[「__ EVENTTARGET」]包含複選框的名稱 – DeWet 2011-05-13 06:06:47

+0

對不起,它應該是Request [「__ EVENTARGUMENT」],在代碼中已更改。基本上這裏發生的事情是,複選框的價值從客戶端傳輸,然後加載在那裏 – 2011-05-13 06:30:17

+0

哇,我仍然很快睡着了,它是:請求[請求[「__ EVENTTARGET」]]將給你的價值 – 2011-05-13 06:38:36