升级到.Net 4.6后,Gridview分页无法正常工作

时间:2015-10-15 16:08:35

标签: asp.net gridview .net-4.6

在我的头撞了好几天后,我决定寻求帮助,因为我已经陷入了我认为可能是.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 

1 个答案:

答案 0 :(得分:0)

这是4.6.1中的回归。该错误已在4.6.1中修复。您可以安装4.6.1 RC来验证修复并等待应该很快发布的RTM。