Gridview PageIndexChanging事件未通过ViewState关闭和动态数据源触发

时间:2014-04-04 09:35:40

标签: asp.net vb.net gridview viewstate page-index-changed

我遇到了触发我的PageIndexChanging事件的问题。 Viewstate已关闭,我有一个动态数据源,我在PageInit事件的每个回发上加载。

<asp:GridView   runat="server" 
                        ID="gvBenefitsList"
                        AllowPaging="true" 
                       >
              .....
                <PagerSettings Mode="NumericFirstLast" FirstPageText="<< First" LastPageText="Last >>"
                PageButtonCount="5" Position="Bottom" />
        </asp:GridView>

指数变更事件

Protected Sub gvBenefitsList_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles gvBenefitsList.PageIndexChanging
        gvBenefitsList.PageIndex = e.NewPageIndex
        gvBenefitsList.DataSource = Data
        gvBenefitsList.DataBind()
    End Sub

每次关闭视图状态时,我都必须重新绑定网格。

Private Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
        Data = getdata()
        gvBenefitsList.DataSource = Data
        gvBenefitsList.DataBind()
    End Sub

哦,Data是DataSet属性

 Dim m_Data As DataSet
    Public Property Data As DataSet
        Get
            Return m_Data
        End Get
        Set(value As DataSet)
            m_Data = value
        End Set
    End Property

因此,当单击第2页时,init事件会触发并绑定网格,但索引更改事件永远不会被触发。我已经厌倦了在init事件中以编程方式附加处理程序

 AddHandler gvBenefitsList.PageIndexChanging, AddressOf gvBenefitsList_PageIndexChanging

但这并没有什么区别。我不确定为什么这不起作用,因为rowCommand事件工作正常。这是关闭Viewstate的母版页的一部分,我们将隐藏的Viewstate变量设置为空字符串以减少页面大小。

 <input type="hidden" name="__EVENTTARGET" value="" />

欢迎任何想法。

1 个答案:

答案 0 :(得分:0)

所以我似乎找到了罪魁祸首。如主页中所述,我们将删除

的值
<input type="hidden" name="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" value="" /> 

这似乎会导致某些javascript回发事件出现问题。我在这里发现了一篇非常好的文章,说明了他们的所作所为。

http://aspalliance.com/895_Understanding_the_JavaScript___doPostBack_Function.all

这两个隐藏字段控制任何执行JavaScript___doPostBack调用的链接按钮,但不会影响正常按钮或图像按钮,因为它们会正确回发到服务器。

检查帖子我可以看到,当点击分页链接时,值为:

__EVENTARGUMENT - Page$2

__EVENTTARGET - ctl00$MasterContent$gvBenefitsList

即使关闭了视图状态,这些字段仍会用于这些事件。

希望这可以帮助别人。我一直在努力奋斗!