在碰撞了好几天之后,我决定寻求帮助,因为我坚持了我认为可能是.NET 4.6的错误。Gridview分页升级到.Net后无法正常工作4.6
我有一个带分页的对象数据源的网格视图(波纹管是一个简化版本),并且一切正常。在常规的Windows更新后的一天,gridview开始有一个奇怪的行为(我会在后面解释),并且在排除故障之后,我意识到这是由于已经安装的.Net 4.6升级引起的。我能够在多台Windows 2012 R2机器和Windows 8.1(包括Visual Studio 2013中的一台)上重现问题,并且当我移除.Net 4.6时,所有事情都再次开始。
我有一个Windows 8.1与VS 2015,所以我测试了它,也能够重现该问题(在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,但我不能在这里重现它,但你明白了。
Pos。
1
2
3
4
5
6
7
8
9
10
< < < >>>
现在的问题:在上面的代码中,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等。
再往下看,如果我点击“go to first”,它只会进入第一页时我做了其他一些行动(即总是落后于一个命令)。我不知道这是非常清楚的,但有一个小标签显示当前页面,它显示了我最后一个命令后面的一个“页面”。
请记住,如果我删除寻呼机模板一切顺利,并在。净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
经过更多的故障排除后,我设法缩小了它的EnableViewState。使用.Net 4.5.2,它可以在页面级别使用EnableViewState =“false”,使用4.6即使在gridview和/或数据源中设置EnableViewState =“true”,它也不起作用。但是,如果我在页面级别设置它,它工作正常。问题是,原始网站上的网页正在从母版页继承,我需要将其打开并且会影响整个网站:( –