日期:2014-05-17  浏览次数:20499 次

关于页面回发的问题
.aspx

<asp:Panel ID="panelRoleList" runat="server"></asp:Panel>
<asp:Button ID="btnPowerSave" runat="server" Text="保存" onclick="btnPowerSave_Click" />

.cs
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
  foreach (DataRow dr in dt_Category.Rows)
  {
  Panel pal1 = new Panel();
  pal1.GroupingText = "test1";

  Panel pal2 = new Panel();
  pal2.GroupingText = "test2";

  panelRoleList.Controls.Add(pal1);
  panelRoleList.Controls.Add(pal2);

  }
}
}
protected void btnPowerSave_Click(object sender, EventArgs e)
{
  for (int i = 0; i < panelRoleList.Controls.Count; i++)
  {
  Panel pl = (Panel)panelRoleList.Controls[i];
  }
}

问题:
Panel pl = (Panel)panelRoleList.Controls[i];
此处出现异常:无法将类型为“System.Web.UI.LiteralControl”的对象强制转换为类型“System.Web.UI.WebControls.Panel”。

调试发现:page_loads时 Panel.Controls Count 为2
  Click时Panel.Controls Count 为1

个人认为可能是页面回发导致的,但具体是怎么导致的,我也不知道
还请各位了解的朋友不吝赐教,非常感谢。。
(本人菜鸟,勿喷。。)


------解决方案--------------------
楼主 你动态添加的控件 在回发的时候 是不能被解析出来的
------解决方案--------------------
Panel pl = (Panel)panelRoleList.Controls[i];
 不能强制进行转换 要判断控件是否为空