问题描述
我遇到了一个奇怪的问题。在网格视图中,我有一些图像按钮,它再次位于更新面板内,用于加载一些带有部分回发的日历内容,无需任何页面刷新。 此部分回发适用于前几行,但在几行之后,假设大约 15 行按钮单击事件未命中,只有断点进入页面加载事件和整个页面刷新。
每一行都有大量数据,但我正在展示更新面板结构。请帮我解决这个问题。我尝试了各种方法来修复它,但仍然面临同样的问题。
<asp:GridView ID="GVSales" runat="server" AllowPaging="false" AutoGenerateColumns="false" DataKeyNames="UserId" BackColor="#FFFFCC" EmptyDataText="No salesman selected to show" OnRowDataBound="GVSales_OnRowDataBound" OnDataBound="GVSales_AfterDataBound">
<PagerSettings Visible="false" />
<AlternatingRowStyle BackColor="#99CCFF" />
<Columns>
<asp:BoundField datafield="GroupName" Visible="false" />
<asp:TemplateField>
<ItemTemplate>
<table width="100%" border="1px" cellpadding="0" cellspacing="0" style="color: Black; font-family: Arial; text-align: center">
<tr>
<td colspan="18" style="text-align: left">
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<div>
<div id="divNavigateCal" runat="server" style="float: right; display: none">
<asp:HiddenField ID="hdnDaydiff" runat="server" Value="1" />
<div class="blink" id="BlinkLoad" style="width: 100px; padding-top: 10px; vertical-align: top; display: none">Please Wait...</div>
<asp:ImageButton ID="imgBtnPrevIoUs" Autopostback="false" runat="server" class="PrevIoUs" CommandArgument='<%# Eval("UserId")%>' Customid='<%# Eval("UserId") %>' OnClientClick='<%# "GetCustomerID(" + Eval("UserId") + ");" %>' ImageUrl="~/admin/images/cal_prevIoUs.gif" OnClick="imgBtnPrevIoUs_Click" />
<asp:ImageButton ID="imgBtnNext" runat="server" class="Next" CommandArgument='<%# Eval("UserId")%>' Customid='<%# Eval("UserId") %>' OnClientClick='<%# "GetCustomerID(" + Eval("UserId") + ");" %>' ImageUrl="~/admin/images/cal_next.gif" OnClick="imgBtnNext_Click"/>
</div>
<input type="button" class="ShowCalendar" value="Show/Hide Calendar" runat="server" data-id='<%# Eval("UserId")%>' /> <asp:Label ID="lbl_alert1" runat="server" Text="Started this week with low meetings" ForeColor="Red" Font-Bold="true" Width="300" Visible='<%# (Convert.ToBoolean(Eval("Alert1"))) %>'></asp:Label>
<asp:Label ID="Label1" runat="server" Text="Did not create 7 meetings on monday." ForeColor="Red" Font-Bold="true" Width="300" Visible='<%# (Convert.ToBoolean(Eval("Alert2"))) %>'></asp:Label>
<table id="calendar">
<tr>
<td>
</td>
</tr>
</table>
</div>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="imgBtnPrevIoUs" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="imgBtnNext" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
</td>
</tr>
</table>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
在这里,我正在更新表日历内容,并针对 imgBtnPrevIoUs imgBtnNext 的按钮单击事件进行部分回发,该事件具有类似日历的结构。 此代码适用于第 14 - 15 行,但此后会出现此问题。
注意: 每行还有其他大量数据,但这里我只展示了更新面板结构。
更新
我已经进一步调查了该问题并禁用了所有更新面板以检查更新面板是否导致问题,但我发现它不是由于更新面板造成的。按钮单击事件在 14 -15 行后不会触发。甚至尝试使用 row 命令并且仍然相同。这个问题的根源可能是什么?任何解决方案?请帮忙。每当我单击按钮时,它只会重新加载页面,但单击事件不会触发调试器。
解决方法
我发现了这个问题。网格视图的 OnRowdataBound 有一些代码在该表中附加了额外的行,这导致了这个奇怪的问题。