0

我定义了以下列表视图

<asp:ListView 
        ID="reportData" 
        EnableSortingAndPagingCallback="True"
        AllowPaging="True"
        AllowSorting="True"
        PageSize="20" 
        OnLayoutCreated="LoadReport"
        onsorting="reportData_Cause_Sorting" 
        OnPagePropertiesChanging="reportData_PagePropertiesChanging"
        runat="server">

我还定义了一个 DataPager

<asp:DataPager ID="reportPager" PagedControlID="reportData" PageSize="20" runat="server" >
    <Fields>
        <asp:NextPreviousPagerField ButtonType="Button" ShowFirstPageButton="True" ShowLastPageButton="True" />
    </Fields>
</asp:DataPager>

然后,由于我将 enableEventValidation 设置为 true,因此我也注册了该项目

   Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
        Page.ClientScript.RegisterForEventValidation(reportData.UniqueID)
        Page.ClientScript.RegisterForEventValidation(reportPager.UniqueID)
        MyBase.Render(writer)
    End Sub

我的初始页面加载运行良好,但是当我单击页面导航时,我被发送到代码隐藏并在收到错误之前通过 page_load

无效的回发或回调参数。使用配置或页面中的 <%@ Page EnableEventValidation="true" %> 启用事件验证。出于安全目的,此功能验证回发或回调事件的参数是否源自最初呈现它们的服务器控件。如果数据有效且符合预期,请使用 ClientScriptManager.RegisterForEventValidation 方法注册回发或回调数据以进行验证。

我只是不明白为什么在我注册了这两个项目以进行事件验证后,我仍然会收到错误消息。我什至从未参加过 RaiseCallbackEvent!

我完全是这些控件的新手,也绝不是 .net 专家。任何帮助或建议将不胜感激!

4

3 回答 3

1

我找到了答案。我正在调用我的函数来加载报告数据并将其绑定到 OnLoad 和 Render 中的 ListView。当我从 OnLoad 中删除额外的调用时,我不再收到该消息。但是,分页仍然无法正常工作,但问题已转移到代码中的不同位置:)

于 2012-07-18T13:38:30.447 回答
0

试试这个简单的例子。
url传递分页的值

protected void DepartmentsListView_SelectedIndexChanged(object sender, ListViewCommandEventArgs e)
{
    MessageLabel.Text = "The key value is " +
      CountriesListView.SelectedValue.ToString() + ".";
}



<asp:ListView ID="CountriesListView" DataSourceID="ContactsDataSource" runat="server"
    DataKeyNames="FirstName" OnItemCommand="DepartmentsListView_SelectedIndexChanged">
    <LayoutTemplate>
        <table cellpadding="4" width="500" runat="server" id="tblCountries">
            <tr id="Tr1" runat="server">
                <th id="Th0" runat="server">
                    ID
                </th>
                <th id="Th1" runat="server">
                    Code
                </th>
                <th id="Th2" runat="server">
                    Name
                </th>
            </tr>
            <tr runat="server" id="itemPlaceholder" />
        </table>
    </LayoutTemplate>
    <ItemTemplate>
        <tr>
            <td>
                <asp:LinkButton runat="server" ID="SelectButton" Text="Select" CommandName="Select" />
            </td>
            <td>
                <asp:Label ID="CountryCodeLabel" runat="server" Text='<%# Eval("EmployeeID")%>' />
            </td>
            <td>
                <asp:Label ID="NameLabel" runat="server" Text='<%# Eval("FirstName")%>' />
            </td>
        </tr>
    </ItemTemplate>
</asp:ListView>


 <asp:DataPager runat="server" ID="DataPager2" PageSize="3" PagedControlID="CountriesListView"
    QueryStringField="pageNumber">
    <Fields>
        <asp:NumericPagerField />
    </Fields>
</asp:DataPager>




    <asp:SqlDataSource ID="ContactsDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:conecec %>"
    SelectCommand="SELECT [EmployeeID], [FirstName], [LastName] FROM Employees">
</asp:SqlDataSource>
于 2012-07-17T20:46:25.997 回答
0

我认为您不需要更改EventValidation或使用RegisterForEventValidation
将此代码放入Page_Load事件中

if (!IsPostBack)
  {
     BindData();
  }

并且不要忘记修改以下PagePropertiesChanged事件ListViews

protected void lstProducts_PagePropertiesChanged(object sender, EventArgs e)
    {
        BindData();
    }
于 2013-08-26T06:51:35.160 回答