动态添加的图像按钮未添加到page.Request.Form

时间:2014-03-06 14:33:28

标签: c# asp.net

我有一个带有固定ImageButton的表和一些在Page_Load中动态添加的ImageButtons。在“查看源代码”页面中,它们看起来完全相同(ID除外):

<tr>
   <td>
      <input type="image" name="ctl00$cphMain$ibSel_020" id="cphMain_ibSel_020" src="/Images/Deselected.gif" />
   </td>
   <td>Fixed ImageButton
   </td>
</tr>
<tr>
   <td>
      <input type="image" name="ctl00$cphMain$ibSel_001" id="cphMain_ibSel_001" src="/Images/Deselected.gif" />
   </td>
   <td>Dynamic ImageButton
   </td>
</tr>
....plus ten more dynamically added ImageButtons ibSel_002 through ibSel_011.

在Page_Load事件中,我通过遍历page.Request.Form来确定哪个控件导致回发。如果我单击固定的ImageButton,if在page.Request.Form中找到“ibSel_020”。如果我单击任何动态ImageButtons,则找不到ID。

我知道所有ImageButtons都会发生回发,因为我更新了(在Page_Load中)带有ID的标签(用于测试目的) - 对于所有动态ImageButtons,它是空白的,对于固定的ImageButton,它是“ibSel_020”

如何判断动态添加的ImageButton导致回发?

以下是生成ImageButtons的一些代码:

for(int Q = 0; Q < g_zTypes.GetLength(0); Q++){
   TableRow tr = new TableRow();

   TableCell tc = new TableCell(); //Add image button to row

   ImageButton ib = new ImageButton();
   ib.ID = "ibSel_" + Q.ToString().PadLeft(3, '0');
   ib.ImageUrl = "/Images/Deselected.gif";
   tc.Controls.Add(ib);

   tr.Cells.Add(tc);

   tc = new TableCell(); //Add extra cell to row
   tc.Text = g_zTypes[Q, 1];
   tr.Cells.Add(tc);

   tblType.Rows.Add(tr);
}

希望它有所帮助。

更新

为了测试,我编写了一大块代码来累积字符串中的所有page.Request.Form元素。在Page_Load结束时,我是Response.Writing zMagic。这是块:

//=============MAGIC CODE=========================
      Control cF;
      string zF;
      foreach(string zControl in Page.Request.Form){
         //For ImageButtons crop off mouse coordinates property
         if(zControl.EndsWith(".x") || zControl.EndsWith(".y")){
            cF = Page.FindControl(zControl.Substring(0, zControl.Length - 2));
         }
         else{
            cF = Page.FindControl(zControl);
         }
         zF = (cF == null) ? "NULL" : cF.ToString();
        zMagic += "<br />Form[" + zControl + "]=[" + zF + "]<br />";
      }
      zMagic += "[END]";
//================================================

我发现动态添加的ImageButton实际上是存在的,无论Page_Load我在哪里卡住'Magic Code'。发生的事情是Page.FindControl()失败了 - 但前提是我在重新创建动态ImageButtons的代码之前有'Magic Code'。

BOTTOM LINE:在重新创建之前,你不能使用Page.FindControl(zDynamicControl)。

1 个答案:

答案 0 :(得分:0)

试试这个。

Dynamically bind eventhandler at runtime

这可以帮助您获取导致回发的控件的ID。

在您的EventHandler中,您可以像这样获得控件的ID。

void imgBtn_Click(object sender, ImageClickEventArgs e)
{
    //((ImageButton)sender).ID
}