none
SharePoint 2013 - VisualWebPart - ListView & DataPager exception RRS feed

  • Вопрос

  • Добрый день!

    Ситуация такая: создаю проект и в нём VisualWebPart для SharePoint 2013. Добавляю и описываю в нём asp:ListView с использованием DataPager. Компилируется. Загружается. Добавляется на страницу. При перелистывании (ПЕРВОМ), например на 2 страницу, всё проходит блестяще. При попытке "перелистнуть" обратно, (на первую) страницу, вылетает Exception.

    System.Web.HttpException: Сбой при загрузке состояния отображения. Дерево элементов управления, в которое загружается это состояние отображения, должно соответствовать дереву элементов управления, использованному для сохранения состояния отображения при предыдущем запросе. Например, при динамическом добавлении элементов управления те элементы управления, которые были добавлены при обратной передаче, должны по типу и положению соответствовать элементам управления, добавленным при исходном запросе.

    [HttpException (0x80004005): Сбой при загрузке состояния отображения. Дерево элементов управления, в которое загружается это состояние отображения, должно соответствовать дереву элементов управления, использованному для сохранения состояния отображения при предыдущем запросе. Например, при динамическом добавлении элементов управления те элементы управления, которые были добавлены при обратной передаче, должны по типу и положению соответствовать элементам управления, добавленным при исходном запросе.]
       System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +12743709
       System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +129
       System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +381
       System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +129
       System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +381
       System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +129
       System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +381
       System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +129
       System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +381
       System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +129
       System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +381
       System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +129
       System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +381
       System.Web.UI.Control.LoadChildViewStateByIndex(ArrayList childState) +129
       System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +381
       System.Web.UI.Page.LoadAllState() +563
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2533
    

    Страница:

    <asp:Panel ID="pnlProductionData" runat="server" CssClass="cit_padding">
            <asp:ListView ID="lvList" runat="server" EnableViewState="true"
                GroupPlaceholderID="gphDefault" ItemPlaceholderID="iphDefault"
                OnPagePropertiesChanging="OnPagePropertiesChanging" Visible="true">
                <LayoutTemplate>
                    <table class="cit_styled_table">
                        <tbody>
                            <tr class="cit_head">
                                <th>
                                    ID
                                </th>
                                <th>
                                    Продавец
                                </th>
                                <th>
                                    Дата
                                </th>
                                <th>
                                    Число
                                </th>
                                <th>
                                    Сумма
                                </th>
                            </tr>
                            <asp:PlaceHolder runat="server" ID="gphDefault"></asp:PlaceHolder>
                            <tr>
                                <td colspan="5">
                                    <asp:DataPager ID="dpPages" runat="server" PagedControlID="lvList" PageSize="5">
                                        <Fields>
                                            <asp:NextPreviousPagerField ButtonType="Link" ShowFirstPageButton="false" 
                                                ShowPreviousPageButton="true" ShowNextPageButton="false" />
                                            <asp:NumericPagerField ButtonType="Link" />
                                            <asp:NextPreviousPagerField ButtonType="Link" ShowNextPageButton="true" 
                                                ShowLastPageButton="false" ShowPreviousPageButton="false" />
                                        </Fields>
                                    </asp:DataPager>
                                </td>
                            </tr>
                        </tbody>
                    </table>
                </LayoutTemplate>
                <GroupTemplate>
                    <tr>
                        <asp:PlaceHolder runat="server" ID="iphDefault"></asp:PlaceHolder>
                    </tr>
                </GroupTemplate>
                <ItemTemplate>
                    <td>
                        <strong>
                            <%# Eval("SaleId") %>
                        </strong>
                    </td>
                    <td>
                        <%# Eval("SallerName") %>
                    </td>
                    <td>
                        <%# Eval("SaleDate") %>
                    </td>
                    <td>
                        <%# Eval("SaleCount") %>
                    </td>
                    <td>
                        <%# Eval("SaleAmmount") %>
                    </td>
                </ItemTemplate>
            </asp:ListView>
        </asp:Panel>

    Код:

    protected void Page_Load(object sender, EventArgs e)
            {
                this.BindListView();
            }
    
    private void BindListView()
            {
                string wpEx = string.Empty;
                DataTable dt = SqlUtills.GetDataTable(ConnectionString, "SELECT * FROM vwSalesBySellers", out wpEx);
                if (String.IsNullOrEmpty(wpEx))
                {
                    lvList.DataSource = dt;
                    lvList.DataBind();
                }
                else
                {
                    pnlTestData.Visible = true;
                    pnlProductionData.Visible = false;
                    Logger.Logging(wpEx, "ListPreviewWP", "ERR");
                }
            }
    
            protected void OnPagePropertiesChanging(object sender, PagePropertiesChangingEventArgs e)
            {
                (lvList.FindControl("dpPages") as DataPager).SetPageProperties(e.StartRowIndex, e.MaximumRows, false);
                this.BindListView();
            }

    Это очередная причуда сервера SharePoint?
    Как конкретно бороться?

    4 декабря 2014 г. 7:27

Ответы

  • Разобрался сам! 
    Что удивительно, если я размещаю код и контролы в проект НЕ шарика, то всё работает превосходно. В шарике же... )) Ну вы поняли)

    Решил проблему элементарно - вынес блок DataPager из ListView. Всё прекрасно отрабатывает.
    19 декабря 2014 г. 13:42