2011-01-20 58 views
2

大家! 我正在写网页上的中继器控制。在我为中继器添加数据分页之后,我遇到了问题: ImageButton不再触发中继器的OnItemCommand事件。为什么?ImageButton不会在中继器控制中触发OnItemCommand

这里,是标记代码部分:

<asp:Repeater ID="PartsRepeater" runat="server" 
        OnItemCommand="partsRepeater_ItemCommand" 
        OnItemDataBound="partsRepeaterItem_Bound"> 
        <HeaderTemplate> 
         <table rules="all" cellspacing="0" style="border-color: rgb(31, 77, 48); 
          border-style: solid; width: 100%; border-collapse: collapse;"> 
          <tr > 
           <td style="width: 92%;"> 
            <table cellspacing="0" border="0" style="border-color: rgb(31, 77, 48); border-style: solid; 
             width: 100%; border-collapse: collapse;"> 
             <tr style="background-color: #1f4d30; color: white;"> 
              <td style="width: 10%;"> 
               <asp:Label runat="server" Text="Name" ID="lblName"> 
               </asp:Label> 
              </td> 
              <td style="width: 10%;"> 
               <asp:Label runat="server" Text="Number" ID="Label64"> 
               </asp:Label> 
              </td> 
              <td style="width: 10%;"> 
               <asp:Label runat="server" Text="Category" ID="Label65"> 
               </asp:Label> 
              </td> 
              <td style="width: 20%;"> 
               <asp:Label runat="server" Text="Description" ID="Label66"> 
               </asp:Label> 
              </td> 
              <td style="width: 20%;"> 
               <asp:Label runat="server" Text="Models" ID="Label67"> 
               </asp:Label> 
              </td> 
              <td style="width: 5%;"> 
               <asp:Label runat="server" Text="Price" ID="Label68"> 
               </asp:Label> 
              </td> 
              <td style="width: 5%;"> 
               <asp:Label runat="server" Text="A Qty" ID="Label69"> 
               </asp:Label> 
              </td> 
              <td style="width: 5%;"> 
               <asp:Label runat="server" Text="B Qty" ID="Label70"> 
               </asp:Label> 
              </td> 
              <td style="width: 5%;"> 
               <asp:Label runat="server" Text="Actual Qty" ID="Label71"> 
               </asp:Label> 
              </td> 
              <td style="width: 5%;"> 
               <asp:Label runat="server" Text="Total Qty" ID="Label72"> 
               </asp:Label> 
              </td> 
              <td style="width: 5%;" > 
              </td> 
             </tr> 
            </table> 
           </td> 
           <td style="width: 8%;" > 
           </td> 
          </tr> 
        </HeaderTemplate> 
        <ItemTemplate> 
         <tr style="border-color: #1f4d30;" 
         > 
         <td style="width: 92%;"> 
           <table border="0" cellspacing="0" class="PartsRepeater_InnerTable"> 
            <tr class="PartsRepeater_InnerTable"> 
             <td style="cursor: pointer; width: 10%;" class="PartsRepeater_InnerTable"> 
              <asp:HiddenField runat="server" ID="PartID" Value='<%# Bind("PartID") %>' Visible="false" /> 
              <asp:LinkButton runat="server" ID="Label52" Text='<%#Eval("Name").ToString()%>' CommandArgument='<%# Eval("PartID") %>'> 
              </asp:LinkButton> 
             </td> 
             <td style="cursor: pointer; width: 10%;" class="PartsRepeater_InnerTable"> 
              <asp:LinkButton ID="Label45" runat="server" Text='<%#Eval("Number").ToString().ToUpper()%>' 
               CommandArgument='<%# Eval("PartID") %>'> 
              </asp:LinkButton> 
             </td> 
             <td style="cursor: pointer; width: 20%;" class="PartsRepeater_InnerTable"> 
              <asp:LinkButton ID="Label46" runat="server" Text='<%#Eval("Category").ToString()%>' 
               CommandArgument='<%# Eval("PartID") %>'> 
              </asp:LinkButton> 
             </td> 
             <td style="cursor: pointer; width: 20%;" class="PartsRepeater_InnerTable"> 
              <asp:LinkButton ID="Label47" runat="server" Text='<%# GetPartDescr((String)Eval("Description"))%>' 
               CommandArgument='<%# Eval("PartID") %>'> 
              </asp:LinkButton> 
             </td> 
             <td style="cursor: pointer; width: 5%;" class="PartsRepeater_InnerTable"> 
              <asp:LinkButton ID="Label48" runat="server" Text=' <%# GetPartDescr((String)Eval("ModelName")) %>' 
               CommandArgument='<%# Eval("PartID") %>'> 
              </asp:LinkButton> 
             </td> 
             <td style="cursor: pointer; width: 4%;" class="PartsRepeater_InnerTable"> 
              <asp:LinkButton ID="Label49" runat="server" Text='<%# GetPrice(Eval("Price").ToString(), Eval("sPrice").ToString(), Eval("Price3").ToString())%>' 
               CommandArgument='<%# Eval("PartID") %>'> 
              </asp:LinkButton> 
             </td> 
             <td style="cursor: pointer; width: 4%;" class="PartsRepeater_InnerTable"> 
              <asp:LinkButton ID="lblAQTY" runat="server" Text=' <%#Eval("AGradeQty").ToString()%>' 
               CommandArgument='<%# Eval("PartID") %>'> 
              </asp:LinkButton> 
             </td> 
             <td style="cursor: pointer; width: 4%;" class="PartsRepeater_InnerTable"> 
              <asp:LinkButton ID="lblBQty" runat="server" Text=' <%# int.Parse(Eval("QtyInStock").ToString()) - int.Parse(Eval("AGradeQty").ToString())%>' 
               CommandArgument='<%# Eval("PartID") %>'> 
              </asp:LinkButton> 
             </td> 
             <td style="cursor: pointer; width: 4%;" class="PartsRepeater_InnerTable"> 
              <asp:LinkButton ID="lblActualQTY" runat="server" Text=' <%#Eval("ActualQty").ToString()%>' 
               CommandArgument='<%# Eval("PartID") %>'> 
              </asp:LinkButton> 
             </td> 
             <td style="cursor: pointer; width: 4%;" class="PartsRepeater_InnerTable"> 
              <asp:LinkButton ID="Label60" runat="server" Text='<%#Eval("QtyInStock").ToString()%>' 
               CommandArgument='<%# Eval("PartID") %>'> 
              </asp:LinkButton> 
             </td> 
            </tr> 
            <tr > 
             <td colspan="15" style="cursor: pointer; width: 5%;"> 
              <asp:LinkButton ID="Label63" runat="server" Text='<%#Eval("priceModificationDate").ToString()%>' 
               Font-Size="Smaller" CommandArgument='<%# Eval("PartID") %>'> 
              </asp:LinkButton> 
             </td> 
            </tr> 
           </table> 
          </td> 
          <td style="width: 8%"> 
           <table> 
            <tr> 
             <td style="cursor: pointer; width: 50%;" class="PartsRepeater_InnerTable"> 
              <asp:ImageButton ID="btnEdit" runat="server" ImageUrl="~/Images/edit.png" CausesValidation="False" 
               CommandName="editRow" CommandArgument='<%# Eval("PartID") %>' OnClientClick='SaveScrollPositions'> 
              </asp:ImageButton> 
             </td> 
             <td style="cursor: pointer; width: 50%;"> 
              <asp:ImageButton ID="btnDelete" runat="server" OnClientClick='<%# GetConfirmMessage(Eval("Name"))%>' 
               ImageUrl="~/Images/delete.png" CausesValidation="False" CommandName="Delete" 
               CommandArgument='<%# Eval("PartID") %>'></asp:ImageButton> 
             </td> 
            </tr> 
           </table> 
          </td> 
         </tr> 
        </ItemTemplate> 
        <FooterTemplate> 
         </table> 
        </FooterTemplate> 
       </asp:Repeater> 

回答

2

我已经试过NANY的方式来解决这个问题并解决它,以便: 我只是用的LinkBut​​ton图像替换的ImageButton: 部分OG代码:

<td style="cursor: pointer; width: 50%;" class="PartsRepeater_InnerTable"> 
              <asp:LinkButton ID="btnEdit" runat="server" CausesValidation="false" CommandName="editRow" 
               CommandArgument='<%# Eval("PartID") %>' OnClientClick='SaveScrollPositions'> 
               <asp:Image ID="Image1" runat="server" ImageUrl="~/Images/edit.png" /> 
              </asp:LinkButton> 
             </td> 
             <td style="cursor: pointer; width: 50%;"> 
              <asp:LinkButton ID="btnDelete" runat="server" CausesValidation="false" CommandName="Delete" 
               CommandArgument='<%# Eval("PartID") %>' OnClientClick='<%# GetConfirmMessage(Eval("Name"))%>'> 
               <asp:Image ID="Image2" runat="server" ImageUrl="~/Images/delete.png" /> 
              </asp:LinkButton> 
             </td> 

更多请见:http://weblogs.asp.net/justinsaraceno/archive/2008/11/05/linkbutton-with-image-and-text.aspx

1

对不起,我没有更具体的答案,但它有somethi与中继器上的ViewState配合使用,并在回发中重新绑定中继器。

显然,当发生回发并重新绑定中继器时,它会丢失一些事件绑定,而不是运行OnCommand,它会将它视为是ImageButton的首页加载。 AFAIK它只发生在ImageButton上,而不是LinkBut​​ton或Button。

0

把这个在它后面的代码一定会努力

if (!Page.IsPostBack) 
{ 
    REPEATERDATABIND(); // Bind method 
} 
相关问题