日期:2014-05-20  浏览次数:20470 次

翻页时,aspx动态传递到ASCX的值就传入不了。大家帮忙看看,谢谢~
在产品显示的页面里,第一页能正常显示,到第二页时,所调整用到ASCX的值就不会显示出来。
调用值的程序如下: <uc1:list_1   id= "list_1 "   runat= "server "   ID= ' <%#   DataBinder.Eval(Container.DataItem,   "Id ")   %> '> </uc1:list_Direct>

在ASCX页面接收如下:
if(!Page.IsPostBack)
      {
        if   (id!=null&&id!= " "&&id!=string.Empty)
        {  
list_direct();
        }
}


Page.IsPostBack的意思是第一次加载时执行,刷新则不执行,那翻页算是刷新吗?
请高手指教~谢谢~


------解决方案--------------------
内置的翻页也是 PostBack 的
LZ 可以把鼠标放在翻页上看看链接 使用了一个 JS:doPostBack
通过脚本 Post 的
所以
你传入不了很可能和 Page_Load 里的 IsPostBack 判断有关
------解决方案--------------------
: <uc1:list_1 id= "list_1 " runat= "server " ID= ' <%# DataBinder.Eval(Container.DataItem, "Id ") %> '> </uc1:list_Direct>
怎么搞了2个ID
不知道你这个UserControl这么写databind是什么意思,难道LZ是拿ASCX 绑定数据的?
------解决方案--------------------
去掉if(!Page.IsPostBack)试试
------解决方案--------------------
不能动态的给用户控件赋值.
: <uc1:list_1 id= "list_1 " runat= "server " ID= ' <%# DataBinder.Eval(Container.DataItem, "Id ") %> '> </uc1:list_Direct>
这样会出错的.
要在代码里写.
private ASP.Spinner Spinner1; 创建用户控件对象

protected void Page_Load(object sender, EventArgs e)
{
Spinner1 = (ASP.Spinner)LoadControl( "~/Controls/Spinner.ascx "); //载入用户控件.
// Set MaxValue first.
Spinner1.MaxValue = 20;
Spinner1.MinValue = 10;
Panle1.Controls.Add(Spinner1); 把控件放到一个Panle里.

}
------解决方案--------------------
这个和执行顺序有关。

第一次访问的情况

1、页面的 PageLoad
2、控件的 PageLoad
3、页面的 <%%> 部分


PostBack 的情况

1、

记不太清楚了,反正呢就是在PostBack的时候先执行了控件见里面获取ID的代码,然后才执行的页面里的给ID赋值的代码。

我写自定义服务器控件的时候总是为这种情况头痛,不知道为什么asp.net的执行顺序会不一样。


lz可以用断点跟踪的方法看一看第一次访问和postback访问的执行顺序。


------解决方案--------------------
把你的代码简化成100行以下,贴出来。
------解决方案--------------------
if(!Page.IsPostBack)
{
if (id!=null&&id!= " "&&id!=string.Empty)
{
list_direct();
}
}

把if(!Page.IsPostBack)判断去掉试试
------解决方案--------------------
jyk(今天由我来写的代码,明天就让程序自己完成!喜欢编程。和气生财。共同提高。共同进步!)
解释的已经很清楚了,很有可能和页面加载控件的顺序有关系
在postback时先初始化了控件,但没执行到页面的pageload,也就自然取不到你绑定的值
如果是这个原因的话你可以把翻页方式由postback方式改为url传页码参数的方式,这样每次打开页都是非postback状态,就可以验证是不是上面说的原因了