页面上动态产生 UserControl 后,DropDownList 无法触发了T.T ?

baidu_23677379 2014-12-15 11:50:17
是这样的上次小弟用,动态载入UserControl的方法后,发现一个问题.


AAA.aspx 画面上 ListVew 触发 OnItemCommand 才去动态载入 UC

但是问题来了

这时候载入的UC 我在DebBug模式下,发现 if (!IsPostBack) 不会成立了 !!

所以读出来的UC,不会DataBind 里面的 DropDownList ,

但是又不能移到 Page_Load ,话说为什么不能再 Page_Load去做 DDL的 DataBind 呢 T.T?

請問这个问题怎么解决呢

UserControl


protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
InitPage();
}

public void InitPage()
{
// 原本放Load,PostBack会导致 ddl 抓不到资料
UserControlHandler _handler = new UserControlHandler();
ddlQ_SC_CellSize.DataSource = _handler.QueryQ_SC_CellSize();
ddlQ_SC_CellSize.DataTextField = "DataTextField";
ddlQ_SC_CellSize.DataValueField = "DataValueField";
ddlQ_SC_CellSize.DataBind();
}






...全文
128 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
baidu_23677379 2014-12-15
  • 打赏
  • 举报
回复
而且还有一件怪事..... 动态产生出来的 UC 上面的【按钮】,都失效了 ... DeBug 发现按钮不会触发...然后直会变成接执行F5 的结果
baidu_23677379 2014-12-15
  • 打赏
  • 举报
回复
各位我解决了 !!! 我刚刚怒了 纸笔把整个Code的流程顺序,写下来 1. 我的目的只是,当触发ListView→OnItemCommand时,要抓到UC【B】 的值 → 进而才知道 UC【C】要套哪一个。 2. 经过上面的流程我发现当触发ListView→OnItemCommand时,只会触发 Page_Load,那我就利用这个 Lift Cycle,把我上面要做的事情用 Try包住,这样第一次近来这个页面时,动态注册失败也不会死,当后面要用的时候自然在 Page_Load就产生的出来了。 因为除了第一次刚进来抓不到 UC 【B】,之后都抓的到了 ^^ 测试都没问题 太爽啦!!
baidu_23677379 2014-12-15
  • 打赏
  • 举报
回复
不好意思 #6 A 、 B 應該是 示意圖的 B、C ,打太快打錯
baidu_23677379 2014-12-15
  • 打赏
  • 举报
回复
谢谢各位!!

我整了一份完整一点的问题

1.aspx
|
|__ A.ascx ( UserControl ) 直接崁在页面上,因为永远不会变
|
|
|__ B.ascx ( UserControl ) 动态,因为会依据 A.ascx的内容值,再去Table 找对应


1.aspx


protected void Page_Load(object sender, EventArgs e)
{

// 问题在这里,因为1.aspx的Page_Load还没跑完,根本还没载入 A.ascx 这个 UC
DropDownList ddl_InsCode = (DropDownList)ucInstrumentsChooseInfo.FindControl("ddl_InsCode");
_InsCode = ddl_InsCode.SelectedValue;

// 基本档抓设定的 tmpClass.QCode

// 导致这抓不到对应的资料 tmpClass.QCode = Null
System.Web.UI.UserControl myUC = (System.Web.UI.UserControl)LoadControl("~/UserControl/XXX.ascx" + tmpClass.QCode);
myUC.ID = "QuestUC";
this.PlaceHolderLoadControl.Controls.Add(myUC);
}

其实我 B.ascx 要触发点是在,1.aspx 页面上有一个 ListView 的 OnItemCommand

可是如果把上面 上面的 Code 搬到 → ListView 的 OnItemCommand 会正常显示,

但是不知道为何当我触发 ListView 的 OnItemCommand → B.ascx上面的所有按钮会全部失效,

(DeBug模式,发现根本只有进去 1.aspx 的 Page_Load就结束程式了... ???)

搞不懂不知道是什么原因 @@...


示意图



上面的 tmpClass.QCode 我如果写死给值的话,所有功能就正常了...

所以最简单的方法是,如果再Page_Load我能抓的到 B 这个 UserControl的值的话,应该就正常了

(但是 Life-Cycle 的顺序不允许这件事情.. Orz)

测试过在 OnPreRender 写那段... 但是,当触发 ListView 的 OnItemCommand 后才会触发 OnPreRender ,所以来不及了><?

不知道怎么办是好 @@
  • 打赏
  • 举报
回复
子级的绑定一般是在上级容器的DataBound事件,比如repeat的ItemDataBound, gridview的 RowDataBound 访问上级窗口(子控件所在的行)e.Item.NamedContainer或e.Row.NamedContainer
於黾 2014-12-15
  • 打赏
  • 举报
回复
用了ajax就别用asp:button
ajaxfeifei 2014-12-15
  • 打赏
  • 举报
回复
引用 2 楼 baidu_23677379 的回复:
而且还有一件怪事..... 动态产生出来的 UC 上面的【按钮】,都失效了 ... DeBug 发现按钮不会触发...然后直会变成接执行F5 的结果
以为生成按钮是Submit类型的,所以单击会产生Submit表单的效果,就是你说的F5刷新效果。。

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧