2011-05-13 69 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