在我的头撞了好几天后,我决定寻求帮助,因为我已经陷入了我认为可能是.Net 4.6的错误。
我有一个带有分页的对象数据源的gridview(下面是简化版本),一切正常。在常规Windows更新后的某一天,gridview开始出现一种奇怪的行为(我稍后会解释),并且在故障排除后我意识到这是由于已经安装的.Net 4.6升级造成的。我能够在几台Windows 2012 R2机器和Windows 8.1(包括一台使用Visual Studio 2013)上重现该问题,当我删除.Net 4.6时,一切都重新开始工作。
我有一个带有VS 2015的Windows 8.1,所以我在那里进行了测试,并且还能够重现问题(在VS2015上我无法移除.Net 4.6,因为它是VS2015的要求)。为了进一步调试问题,我继续使用VS2015。
为了便于解释,我发布了VS2015版本,该版本是原始gridview的精简版本,并且我一直用于测试。
<%@ Page Title="Top of Shame" Language="C#" CodeBehind="HallOfShame.aspx.cs" Inherits="SissdwWebSite.Siss.SwingWorker.HallOfShame" EnableViewState="false" %>
<body>
<form runat="server">
<asp:GridView
ID="GvSwingWorkersOfShame" runat="server" DataSourceID="DsSwingWorkersOfShame" AutoGenerateColumns="false" PagerSettings-Mode="NextPreviousFirstLast"
AllowPaging="True" AllowCustomPaging="true">
<Columns>
<asp:BoundField DataField="RowNumber" HeaderText="Pos." ItemStyle-HorizontalAlign="Right" />
</Columns>
</asp:GridView>
<p></p>
<asp:ObjectDataSource ID="DsSwingWorkersOfShame" runat="server" EnablePaging="true"
SelectMethod="GetData" TypeName="SissdwWebSite.DataLayer.SissdwTableAdapters.HallOfShameTableAdapter"
SelectCountMethod="GetHallOfShameCount">
<SelectParameters>
<asp:Parameter Name="CodOper" Type="String" ConvertEmptyStringToNull="false" />
</SelectParameters>
</asp:ObjectDataSource>
</form>
</body>
gridview预计会生成一个类似下面的列表(原始版本有大约10列,但我将其剥离到第一个带有行号的列表,以便更容易理解)。输出是HTML,但我不能在这里重现它,但你明白了。
排名
1
2
3
4
5
6
7
8
9
10
&LT;&LT;&LT;&GT;&GT;&GT;
现在问题:在上面的代码中,gridview完全按预期工作。如果我把自定义寻呼机放在下面(或者我试过的其他几种组合),那么gridview开始落后一次。
<PagerTemplate>
<table>
<tr>
<td style="width: 30%">
<asp:LinkButton runat="server" ID="First" CommandArgument="First" CommandName="Page">
<img id="imgFirst" runat="server" src="~/images/2leftarrow.png" height="16" width="16" />
</asp:LinkButton>
<asp:LinkButton runat="server" ID="Prev" CommandArgument="Prev" CommandName="Page">
<img id="imgPrev" runat="server" src="~/images/1leftarrow.png" height="16" width="16" />
</asp:LinkButton>
<asp:LinkButton runat="server" ID="Next" CommandArgument="Next" CommandName="Page">
<img id="imgNext" runat="server" src="~/images/1rightarrow.png" height="16" width="16" />
</asp:LinkButton>
<asp:LinkButton runat="server" ID="Last" CommandArgument="Last" CommandName="Page">
<img id="imgLast" runat="server" src="~/images/2rightarrow.png" height="16" width="16" />
</asp:LinkButton>
</td>
</tr>
</table>
</PagerTemplate>
落后一次,我的意思是,在我第一次点击向前箭头时,显示的结果没有任何反应(但是PageIndex从0移动到1)。第二次,它显示位置11-20,内部PageIndex从1移动到2,等等。
如果我点击&#34;进入第一个&#34;进一步下线,当我做其他动作时它将只进入第一页(即,它总是落后于一个命令)。我不知道这是否非常清楚,但有一个小标签显示当前页面,它显示一个&#34;页面后面&#34;我的最后一个命令
请记住,如果我删除了寻呼机模板一切顺利,并且在.Net 4.5.2上,无论寻呼机模板如何,一切都运行良好。
我尝试调试.Net 4.6框架,但我无法理解它,以弄清楚发生了什么。
总结:是.Net 4.6错误,还是我错过了什么?有没有办法让我的gridview在.Net 4.6上再次正常工作,通过修复我的代码还是由于其他一些解决方法?
任何有关进一步解决问题的建议都很好......
编辑:关于这个问题的一些额外澄清。我在几个事件处理程序的每个阶段打印PageIndex。 在初始页面加载Page_Load =0
GvSwingWorkersOfShame_DataBinding =0
GvSwingWorkersOfShame_DataBound =0
Pos.
1
2
3
4
5
6
7
8
9
10
点击前进时间:
Page_Load =0
GvSwingWorkersOfShame_DataBinding =0
GvSwingWorkersOfShame_DataBound =0
GvSwingWorkersOfShame_PageIndexChanging =0
GvSwingWorkersOfShame_PageIndexChanged =1
GvSwingWorkersOfShame_DataBinding =1
GvSwingWorkersOfShame_DataBound =1
Pos.
1
2
3
4
5
6
7
8
9
10