Не удалось загрузить viewstate - PullRequest
5 голосов
/ 18 июня 2010

ОК только что начали получать эту ошибку, и я не уверен, почему.У меня есть страница хостинга, которая имеет просмотр списка и панель с контролем пользователя.Список просмотра загружает записи с помощью кнопки ссылки.Вы нажимаете кнопку ссылки, чтобы редактировать эту конкретную запись, которая загружается в форму просмотра (в пользовательском контроле), которая переходит в режим редактирования.После того, как в форме просмотра происходит обновление, я запускаю событие, которое прослушивает моя страница хостинга.Затем страница хостинга повторно связывает вид списка, чтобы показать обновленные данные.Это все внутри панели обновления.

Так что все это работает - но когда я затем нажимаю на другую кнопку ссылки, я получаю следующую ошибку:

Message: Sys.WebForms.PageRequestManagerServerErrorException: Failed to load viewstate.  The control tree into which viewstate is being loaded must match the control tree that was used to save viewstate during the previous request.  For example, when adding controls dynamically, the controls added during a post-back must match the type and position of the controls added during the initial request.

Любые предложения о том, как исправить?

Вид моего списка успешно восстанавливается - я вижу свои измененные данные ... Я просто не знаю, почему он жалуется на состояние просмотра, когда я нажимаю на кнопку ссылки.Или есть лучший способ обновить данные в моем списке просмотра?Мой список и вид формы связаны с источниками объектных данных (в случае, если это имеет значение)

Спасибо за помощь!

Вот код моего контроля.Другие люди прокомментировали эту ошибку, связанную с изменением режима просмотра формы, но попытались несколько изменений безуспешно:

public partial class UserControls_RatesEditDate : System.Web.UI.UserControl
{

    public delegate void EditDateRateEventHandler(DateTime theDateTime);
    public event EditDateRateEventHandler EditDateRateSelected;

    public delegate void UpdateDateRateEventHandler();
    public event UpdateDateRateEventHandler EditDateRateUpdated;

    public int PropertyID { get; set; }
    public int AccommodationTypeID { get; set; }
    public DateTime TheDateTime { get; set; }
    public PropertyCMSRate Rate { get; set; }

    // display filters
    public bool DisplayMTABuy { get; set; }
    public bool DisplayMTASell { get; set; }
    public bool DisplayAffiliate { get; set; }
    public bool DisplayWeekly { get; set; }
    public bool DisplayThirtyDay { get; set; }
    public bool DisplayFlexi { get; set; }

    protected void Page_PreRender(object sender, EventArgs e)
    {
        if (Rate != null || TheDateTime != DateTime.MinValue)
        {
            if (TheDateTime == DateTime.MinValue)
            {
                frmViewRatesDate.DataSource = new List<PropertyCMSRate> { Rate };
            }
            else
            {
                PropertyCMSRateItemDs.SelectParameters["propertyID"].DefaultValue = PropertyID.ToString();
                PropertyCMSRateItemDs.SelectParameters["accommodationTypeId"].DefaultValue = AccommodationTypeID.ToString();
                PropertyCMSRateItemDs.SelectParameters["theDateTime"].DefaultValue = TheDateTime.ToString();
                frmViewRatesDate.DataSourceID = "PropertyCMSRateItemDs";

                frmViewRatesDate.ChangeMode(FormViewMode.Edit);
            }

            frmViewRatesDate.DataBind();

            if (frmViewRatesDate.CurrentMode == FormViewMode.Edit)
            {
                ((HiddenField)frmViewRatesDate.FindControl("hdnPropertyID")).Value = PropertyID.ToString();
                ((HiddenField)frmViewRatesDate.FindControl("hdnAccommTypeID")).Value = AccommodationTypeID.ToString();

            }

        }
    }

    protected void lnkEditDate_Click(object sender, EventArgs e)
    {
        if (EditDateRateSelected != null)
            EditDateRateSelected(Convert.ToDateTime(((LinkButton)frmViewRatesDate.Row.FindControl("lnkEditDate")).Text));

    }

    protected void btnUpdate_Click(object sender, EventArgs e)
    {

        if (Page.IsValid)
        {
            if (EditDateRateUpdated != null)
                EditDateRateUpdated();
        }

    }

    protected void frmViewRatesDate_ItemCommand(object sender, FormViewCommandEventArgs e)
    {
        if (e.CommandName == "Update")
        {
            PropertyCMSRateItemDs.UpdateParameters["propertyId"].DefaultValue = ((HiddenField)frmViewRatesDate.FindControl("hdnPropertyID")).Value;
            PropertyCMSRateItemDs.UpdateParameters["accommodationTypeId"].DefaultValue = ((HiddenField)frmViewRatesDate.FindControl("hdnAccommTypeID")).Value;
            PropertyCMSRateItemDs.UpdateParameters["minStay"].DefaultValue = ((DropDownList)frmViewRatesDate.FindControl("EditPriceMinStayList")).SelectedValue;
        }
    }

    protected void PropertyCMSRateItemDs_Updated(object sender, ObjectDataSourceStatusEventArgs e)
    {

        if (EditDateRateUpdated != null)
            EditDateRateUpdated();
    }
}

Хорошо, вот моя страница aspx - извините, я понял, что это может помочь после того, как я покинулофис, чтобы захватить еду.:) Поместите комментарий перед моим списком, содержащий это слово ..

<%@ MasterType VirtualPath="~/Properties-Cms/AddEdit.master" %>
<%@ Register Src="../UserControls/RatesEditDate.ascx" TagName="RatesEditDate" TagPrefix="uc1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <Triggers>
        </Triggers>
        <ContentTemplate>
                <asp:ValidationSummary ID="ValidationSummary1" runat="server" ValidationGroup="Main" />
            <div class="bluebox">
                <asp:ValidationSummary ID="ValidationSummary2" runat="server" ValidationGroup="AddAccommodationType" />
                <asp:CustomValidator ID="DisplayPriceValidation" Display="Dynamic" runat="server" OnServerValidate="DisplayPrice_Validated"
                                ValidationGroup="Main" ErrorMessage="Please ensure you have selected Accommodation and selected a valid display rates option">
                            </asp:CustomValidator>
                <div class="col33">
                    <!-- accommodation -->
                    <div class="field">
                        <asp:Label ID="Label1" runat="server" Text="Select Accommodation" AssociatedControlID="Accommodations1" />
                        <asp:DropDownList ID="Accommodations1" runat="server" AutoPostBack="true" DataTextField="AccommodationTypeDescription"
                            DataValueField="Id" OnDataBound="Accommodations1_DataBound" OnSelectedIndexChanged="Accommodations1_SelectedIndexChanged"
                            Width="200px" DataSourceID="AccommodationDs">
                        </asp:DropDownList>
                        <asp:ObjectDataSource ID="AccommodationDs" runat="server" OldValuesParameterFormatString="original_{0}"
                            SelectMethod="ListByPropertyId" TypeName="Shared.MtaLib.Bll.PropertyAccommodationController">
                            <SelectParameters>
                                <asp:Parameter Name="PropertyId" Type="Int32" />
                            </SelectParameters>
                        </asp:ObjectDataSource>
                    </div>
                </div>
                <!-- middle column -->
                <div class="col33">
                    <ul style="list-style-type: none;">
                        <li>
                            <asp:Label ID="Label100" runat="server" Text="Accommodation" AssociatedControlID="lblAccom" />&nbsp;<asp:Label
                                ID="lblAccom" runat="server" Text="" /></li>
                        <li>
                            <asp:Label ID="Label101" runat="server" Text="Local Label" AssociatedControlID="lblLocalLabel" />&nbsp;<asp:Label
                                ID="lblLocalLabel" runat="server" Text="" /></li>
                    </ul>
                </div>
                <!--Right hand side Level 1 -->
                <div class="col33">
                    <asp:Button runat="server" ID="btnAddAccommodation" Text="Add Accommodation" OnClick="btnAddAccommodation_Click" /><br />
                    <br />
                    <asp:LinkButton runat="server" ID="lnkEditAccommodation" Text="View/Edit available Accommodations"
                        OnClick="lnkEditAccommodation_Click" />
                    <br />
                </div>
                <div style="clear: both;">
                </div>
            </div>
            <!--Left hand side Level 2 -->
            <asp:Panel runat="server" ID="pnlViewAccommodationRatesDates">
                <div style="clear: both;" />
                <div class="box">
                    <div class="col40">
                        Display rates Range<br />
                        <asp:RadioButton ID="ViewRange" runat="server" GroupName="DisplayDate" Checked="true" />
                        <asp:Label runat="server" ID="Label5" AssociatedControlID="txtDisplayFrom" Text="From" />
                        <asp:TextBox ID="txtDisplayFrom" runat="server"></asp:TextBox>
                        <asp:Label runat="server" ID="Label6" AssociatedControlID="txtDisplayTo" Text="To" />
                        <asp:TextBox ID="txtDisplayTo" runat="server"></asp:TextBox>
                    </div>
                    <div class="col20">
                        <br />
                        <asp:RadioButton ID="ViewRange1" runat="server" GroupName="DisplayDate" Text="Next 1 month" /><br />
                        <asp:RadioButton ID="ViewRange3" runat="server" GroupName="DisplayDate" Text="Next 3 month" /><br />
                        <asp:RadioButton ID="ViewRange6" runat="server" GroupName="DisplayDate" Text="Next 6 month" />
                    </div>
                    <div class="col20">
                        Show<br />
                        <asp:CheckBox ID="chkDisplayMTABuy" runat="server" Text="MTA Buy" Checked="true" /><br />
                        <asp:CheckBox ID="chkDisplayMTASell" runat="server" Text="MTA Sell" Checked="true" /><br />
                        <asp:CheckBox ID="chkDisplayAffiliateNett" runat="server" Text="Affiliate Nett" Checked="true" /><br />
                        <asp:CheckBox ID="chkDisplayWeekly" runat="server" Text="Weekly" Checked="true" /><br />
                        <asp:CheckBox ID="chkDisplay30Day" runat="server" Text="30 Day" Checked="true" /><br />
                        <asp:CheckBox ID="chkDisplayFlexi" runat="server" Text="Flexi" Checked="true" />
                    </div>
                    <div class="col20">
                        <br />
                        <br />
                        <br />
                        <asp:Button ID="btnDisplayRates" runat="server" Text="Display Rates" OnClick="btnDisplayRates_Click" />
                        <br />
                        <br />
                        <asp:LinkButton ID="lnkAddEditRate" runat="server" Text="Add / Edit Rates" OnClick="lnkAddEditRate_Click" />
                    </div>
                    <div style="clear: both;" />
                </div>
            </asp:Panel>
            <!-- hidden panel removed as I'm out of characters -->
            <!-- Listview containing user control.. usercontrol has formview with a linkbutton -->
            <asp:Panel runat="server" ID="pnlViewAccommodationRates" Visible="false">
                <div class="propertyaddedit_ratesbox">
                    <fieldset>
                        <legend>Click on individual dates to edit</legend>
                        <asp:Panel ID="Panel5" runat="server" ScrollBars="Vertical" Height="400">
                            <asp:ListView ID="PropertyAccommodationRates1" runat="server" DataSourceID="PropertyCMSRateListDs"
                                ItemPlaceholderID="itemsGoHere" OnItemDataBound="PropertyAccommodationRates1_ItemDataBound"
                                GroupItemCount="7" GroupPlaceholderID="groupsGoHere">
                                <GroupTemplate>
                                    <tr>
                                        <asp:PlaceHolder runat="server" ID="itemsGoHere" />
                                    </tr>
                                </GroupTemplate>
                                <ItemTemplate>
                                    <td>
                                        <uc1:RatesEditDate ID="RatesViewDate1" runat="server" OnEditDateRateSelected="RatesEditDate1_EditDateRateSelected"
                                            OnEditDateRateUpdated="RatesEditDate1_EditDateRateUpdated" />
                                    </td>
                                </ItemTemplate>
                                <LayoutTemplate>
                                    <table width="525px" cellspacing="2">
                                        <tr class="propertyaddedit_gridViewRates">
                                            <th class="propertyaddedit_ratesGrid">
                                                Monday
                                            </th>
                                            <th class="propertyaddedit_ratesGrid">
                                                Tuesday
                                            </th>
                                            <th class="propertyaddedit_ratesGrid">
                                                Wednesday
                                            </th>
                                            <th class="propertyaddedit_ratesGrid">
                                                Thursday
                                            </th>
                                            <th class="propertyaddedit_ratesGrid">
                                                Friday
                                            </th>
                                            <th class="propertyaddedit_ratesGrid">
                                                Saturday
                                            </th>
                                            <th class="propertyaddedit_ratesGrid">
                                                Sunday
                                            </th>
                                        </tr>
                                        <tr>
                                            <asp:PlaceHolder runat="server" ID="groupsGoHere" />
                                        </tr>
                                    </table>
                                </LayoutTemplate>
                            </asp:ListView>
                            <asp:ObjectDataSource ID="PropertyCMSRateListDs" runat="server" SelectMethod="ListPropertyCMSRates"
                                TypeName="Shared.MtaLib.Bll.PropertyRateController" OnSelecting="PropertyCMSRateListDs_Selecting">
                                <SelectParameters>
                                    <asp:Parameter Name="propertyId" Type="Int32" />
                                    <asp:Parameter Name="accommodationTypeId" Type="Int32" />
                                    <asp:Parameter Name="minDateTime" Type="DateTime" />
                                    <asp:Parameter Name="maxDateTime" Type="DateTime" />
                                    <asp:Parameter Name="fillMondays" Type="Boolean" DefaultValue="true" />
                                </SelectParameters>
                            </asp:ObjectDataSource>
                        </asp:Panel>
                    </fieldset>
                </div>
            </asp:Panel>



            <div style="clear: both;">
            </div>
            <!-- this is the usercontrol where the edit occurs -->
            <div runat="server" id="divEditRate" visible="true">
                <uc1:RatesEditDate ID="RatesEditDate1" runat="server" />
            </div>
        </ContentTemplate>
    </asp:UpdatePanel>
</asp:Content>

Мой пользовательский элемент управления:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="RatesEditDate.ascx.cs"
    Inherits="UserControls_RatesEditDate" %>
<asp:FormView ID="frmViewRatesDate" runat="server" Height="50px" Width="125px" OnItemCommand="frmViewRatesDate_ItemCommand"
    DataKeyNames="TheDateTime">
    <ItemTemplate>
        <asp:LinkButton ID="lnkEditDate" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "TheDateTime", "{0:dd/MM/yyyy}") %>'
            OnClick="lnkEditDate_Click" />
        <asp:Literal ID="Literal1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "MTABuyRateDaily", "{0:n}") %>'
            Visible='<%# DisplayMTABuy %>' />
        <asp:Literal ID="Literal2" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "MTASellRateDaily", "{0:n}") %>'
            Visible='<%# DisplayMTASell %>' />
        <asp:Literal ID="Literal3" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "AffiliateNettDaily", "{0:n}") %>'
            Visible='<%# DisplayAffiliate %>' />
        <asp:Literal ID="Literal4" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "MTABuyRateWeekly", "{0:n}") %>'
            Visible='<%# DisplayWeekly %>' />
        <asp:Literal ID="Literal5" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "MTASellRateWeekly", "{0:n}") %>'
            Visible='<%# DisplayWeekly %>' />
        <asp:Literal ID="Literal6" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "AffiliateNettWeekly", "{0:n}") %>'
            Visible='<%# DisplayWeekly %>' />
        <asp:Literal ID="Literal7" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ThirtyDay", "{0:n}") %>'
            Visible='<%# DisplayThirtyDay %>' />
        <asp:Literal ID="Literal8" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Flexi", "{0:n}") %>'
            Visible='<%# DisplayFlexi %>' />
    </ItemTemplate>
    <EditItemTemplate>
        <div class="field">
            <asp:Literal ID="TheDate" runat="server" Text='<%# Bind("TheDateTime", "{0:dd/MM/yyyy}") %>' />
        </div>
        <div class="field">
            <asp:Label ID="Label1" Text="MTA buy rate" AssociatedControlID="MTABuyRate1" runat="server" /><asp:TextBox
                ID="MTABuyRate1" runat="server" Text='<%# Bind("MTABuyRateDaily", "{0:n}")%>' />
            <asp:CompareValidator ID="MTABuyRateValidator" runat="server" Type="Currency" ControlToValidate="MTABuyRate1"
                Operator="GreaterThan" ValueToCompare="0" ErrorMessage="" Display="Dynamic" ValidationGroup="EditPrice">
                <asp:Image ID="Image8" SkinID="ValidationErrorImage" runat="server" />
            </asp:CompareValidator>
            <asp:RequiredFieldValidator ID="MTABuyRateValidator2" runat="server" ControlToValidate="MTABuyRate1"
                ErrorMessage="" Display="Dynamic" ValidationGroup="EditPrice">
                <asp:Image ID="Image33" SkinID="ValidationErrorImage" runat="server" />
            </asp:RequiredFieldValidator>
        </div>
        <!-- similar items removed due to character restriction -->
        <div class="field">
            <asp:Label ID="Label6" Text="Total PAX" runat="server" AssociatedControlID="TotalPax1" />
            <asp:CompareValidator ID="TotalPaxValidator1" runat="server" ControlToValidate="TotalPax1"
                Operator="NotEqual" ValueToCompare="0" ErrorMessage="Please choose a non zero Total Pax "
                Display="Dynamic" ValidationGroup="EditPrice">
                <asp:Image ID="Image15" SkinID="ValidationErrorImage" runat="server" />
            </asp:CompareValidator>
            <asp:DropDownList ID="TotalPax1" runat="server">
                <asp:ListItem Value="0" />
                <asp:ListItem Value="1" />
                <asp:ListItem Value="2" />
                <asp:ListItem Value="3" />
                <asp:ListItem Value="4" />
                <asp:ListItem Value="5" />
                <asp:ListItem Value="6" />
                <asp:ListItem Value="7" />
                <asp:ListItem Value="8" />
                <asp:ListItem Value="9" />
                <asp:ListItem Value="10" />
            </asp:DropDownList>
        </div>
        <div class="field">
            <asp:Label runat="server" ID="Label15" AssociatedControlID="EditPriceMinStayList"
                Text="Min stay (nights)" />
            <asp:CompareValidator ID="EditPriceMinStayListValidator1" runat="server" ControlToValidate="EditPriceMinStayList"
                Operator="NotEqual" ValueToCompare="0" ErrorMessage="Please choose a non zero Min Stay"
                Display="Dynamic" ValidationGroup="EditPrice">
                <asp:Image ID="Image6" SkinID="ValidationErrorImage" runat="server" />
            </asp:CompareValidator>
            <!-- todo bind-->
            <asp:DropDownList ID="EditPriceMinStayList" runat="server">
                <asp:ListItem Value="0" />
                <asp:ListItem Value="1" />
                <asp:ListItem Value="2" />
                <asp:ListItem Value="3" />
                <asp:ListItem Value="4" />
                <asp:ListItem Value="5" />
                <asp:ListItem Value="6" />
                <asp:ListItem Value="7" />
                <asp:ListItem Value="8" />
                <asp:ListItem Value="9" />
                <asp:ListItem Value="10" />
                <asp:ListItem Value="11" />
                <asp:ListItem Value="12" />
                <asp:ListItem Value="13" />
                <asp:ListItem Value="14" />
                <asp:ListItem Value="15" />
                <asp:ListItem Value="16" />
                <asp:ListItem Value="17" />
                <asp:ListItem Value="18" />
                <asp:ListItem Value="19" />
                <asp:ListItem Value="20" />
                <asp:ListItem Value="21" />
                <asp:ListItem Value="22" />
                <asp:ListItem Value="23" />
                <asp:ListItem Value="24" />
                <asp:ListItem Value="25" />
                <asp:ListItem Value="26" />
                <asp:ListItem Value="27" />
                <asp:ListItem Value="28" />
                <asp:ListItem Value="29" />
                <asp:ListItem Value="30" />
            </asp:DropDownList>
        </div>
        <div class="field">
            <%--<asp:Button ID="btnUpdate" runat="server" Text="Update" OnClick="btnUpdate_Click" CommandName="Update" />--%>
            <asp:Button ID="btnUpdate" runat="server" Text="Update" CommandName="Update" ValidationGroup="EditPrice" />
        </div>
        <asp:HiddenField runat="server" ID="hdnPropertyID" />
        <asp:HiddenField runat="server" ID="hdnAccommTypeID" />
    </EditItemTemplate>
</asp:FormView>
<asp:ObjectDataSource ID="PropertyCMSRateItemDs" runat="server" SelectMethod="ListPropertyCMSRate"
    TypeName="Shared.MtaLib.Bll.PropertyRateController" UpdateMethod="UpdatePropertyCMSRate"
    OldValuesParameterFormatString="original_{0}" OnUpdated="PropertyCMSRateItemDs_Updated">
    <UpdateParameters>
        <asp:Parameter Name="propertyId" Type="Int32" />
        <asp:Parameter Name="accommodationTypeId" Type="Int32" />
        <asp:Parameter Name="minStay" Type="Int32" />
        <asp:Parameter Name="TheDateTime" Type="DateTime" />
        <asp:Parameter Name="MTABuyRateDaily" Type="Decimal" />
        <asp:Parameter Name="MTASellRateDaily" Type="Decimal" />
        <asp:Parameter Name="AffiliateNettDaily" Type="Decimal" />
        <asp:Parameter Name="MTABuyRateWeekly" Type="Decimal" />
        <asp:Parameter Name="MTASellRateWeekly" Type="Decimal" />
        <asp:Parameter Name="AffiliateNettWeekly" Type="Decimal" />
        <asp:Parameter Name="ThirtyDay" Type="Decimal" />
        <asp:Parameter Name="Flexi" Type="Decimal" />
        <asp:Parameter Name="IsBreakfastIncluded" Type="Boolean" />
        <asp:Parameter Name="IsFairWarning" Type="Boolean" />
        <asp:Parameter Name="TotalPax" Type="Int32" />
        <asp:Parameter Name="original_TheDateTime" Type="DateTime" />
    </UpdateParameters>
    <SelectParameters>
        <asp:Parameter Name="propertyId" Type="Int32" DefaultValue="0" />
        <asp:Parameter Name="accommodationTypeId" Type="Int32" DefaultValue="0" />
        <asp:Parameter Name="theDateTime" Type="DateTime" />
    </SelectParameters>
</asp:ObjectDataSource>

Ответы [ 6 ]

5 голосов
/ 27 мая 2011

Я боролся с этой проблемой в течение нескольких часов и дней. Ни один из ответов, которые я нашел, не решил полностью мою проблему, но я наконец нашел решение.

Мой сценарий выглядит следующим образом. У меня есть GridView и FormView. Это два представления элемента управления MultiView. Я отображаю список данных в GridView. Моя кнопка редактирования переключается на FormView, потому что я хочу редактировать больше полей, чем уместится в горизонтальной линии на виде сетки (без горизонтальной прокрутки).

Если я выйду из режима редактирования FormView и вернусь к GridView (для этого я использую событие OnClick), в следующий раз, когда произойдет обратная передача, я получу ошибку ViewState.

Если я отменяю режим редактирования FormView и просто переключаюсь в режим ReadOnly, а затем отменяю возврат к GridView, все работает нормально.

РЕШЕНИЕ: Мое решение состояло в том, чтобы установить режим по умолчанию для FormView «Редактировать». Моя теория состоит в том, что если режим FormView по умолчанию «ReadOnly», когда я отменяю из режима редактирования FormView, при следующей загрузке страницы он пытается применить ViewState режима редактирования к режиму ReadOnly (по умолчанию, когда страница загружается). Если для представления по умолчанию установлено значение «Редактировать», ViewState, сохраненный в режиме редактирования, после загрузки страницы перезагружается в новый режим редактирования (по умолчанию).

Все это происходит, даже если текущий ActiveView в MultiView отображает сетку, а не форму.

У меня не было проблем ViewState с момента переключения режима по умолчанию FormView на «Редактировать»

Надеюсь, это поможет, и я приветствую любые комментарии.

Спасибо.

Харв Сатер

4 голосов
/ 18 июня 2010

Трудно дать вам точный ответ, не просматривая всю страницу aspx, но обычно такие проблемы возникают, когда вы изменяете элементы, у которых включено viewstate с использованием javascript.Когда вы отправляете сообщение обратно на ваш сервер (например, нажимая кнопку ссылки), состояние просмотра на вашей странице отличается от состояния просмотра, которое ищет сервер, поэтому происходит сбой.Это мера безопасности.

Используете ли вы AJAX через панель обновлений?У вас есть некоторые части вашей страницы в панели обновления, а некоторые нет?Возможно, ваше мероприятие обновляет некоторые элементы управления, а не другие.

Не могли бы вы предоставить аннотированную версию вашей страницы ASPX, на которую мы могли бы взглянуть?

2 голосов
/ 18 июня 2010

Эта проблема была и моим недавним кошмаром. Есть много возможностей, которые могут привести к ошибке «Не удалось загрузить viewstate». В большинстве случаев это связано с динамически создаваемыми элементами управления и .Visible свойствами элементов управления, которые могут изменять иерархию элементов управления, добавляемых на страницу.

Насколько мне известно, проблема может заключаться в видимых свойствах элементов управления. Пожалуйста, сначала попытайтесь удалить привязку данных к видимым свойствам и посмотрите, как она работает.

<asp:Literal ID="Literal1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "MTABuyRateDaily", "{0:n}") %>'
        Visible='<%# DisplayMTABuy %>' />
    <asp:Literal ID="Literal2" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "MTASellRateDaily", "{0:n}") %>'
        Visible='<%# DisplayMTASell %>' />
    <asp:Literal ID="Literal3" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "AffiliateNettDaily", "{0:n}") %>'
        Visible='<%# DisplayAffiliate %>' />
    <asp:Literal ID="Literal4" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "MTABuyRateWeekly", "{0:n}") %>'
        Visible='<%# DisplayWeekly %>' />
    <asp:Literal ID="Literal5" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "MTASellRateWeekly", "{0:n}") %>'
        Visible='<%# DisplayWeekly %>' />
    <asp:Literal ID="Literal6" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "AffiliateNettWeekly", "{0:n}") %>'
        Visible='<%# DisplayWeekly %>' />
    <asp:Literal ID="Literal7" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ThirtyDay", "{0:n}") %>'
        Visible='<%# DisplayThirtyDay %>' />
    <asp:Literal ID="Literal8" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Flexi", "{0:n}") %>'
        Visible='<%# DisplayFlexi %>' />
1 голос
/ 28 июня 2010

Что ж, похоже, моя проблема связана с видом формы и изменением режимов.

В итоге я создал второй пользовательский элемент управления с видом формы, который имеет только шаблон элемента редактирования, и я установил режим редактирования по умолчанию.Использование этого для редактирования, а оригинальное для просмотра ставок избавило от ошибки viewstate.

Это, очевидно, не идеально, так как я не должен был это делать - но пока я пытался заставить егоне переключаться в режим только для чтения после сохранения изменений - ничто из того, что я пробовал, не предотвратило бы ошибку viewstate.Потратил достаточно много времени на эту проблему - время двигаться дальше !!Спасибо за предложения, хотя люди :)

0 голосов
/ 06 декабря 2018

НЕ РЕКОМЕНДУЕТСЯ , но у вас есть возможность отключить viewstate в вашем файле .aspx через переменную ViewStateMode.

<%@ Control Language="C#" AutoEventWireup="true" ViewStateMode="Disabled" CodeFile="IN-Content-Filter.ascx.cs" Inherits="CMSWebParts_CustomWebParts_Intranet_IN_Content_Filter" %>
0 голосов
/ 21 ноября 2014

Не удалось загрузить viewstate. Это происходит в основном при использовании нескольких встроенных команд для элементов управления ASP, которые изменяют представление с помощью post-back instace или Async Postback event

Пример: элементы управления, такие как Gridview, Multiview, Formview, Listview.

Для всех вышеперечисленных элементов управления команда событий, такая как 'edit' (которая говорит в режиме редактирования), на данный момент не существует 2 событий, например 1) 'onrowediting' 2 ) 'onrowedited' Примечание 2-е событие не существует. если вы пытаетесь добавить элементы управления динамически в этот момент 'Не удалось загрузить viewstate' .

Решение : Нам нужно использовать такие команды, как 'select', которые имеют оба отдельных события, например 1) 'onselectedindexchanging' и 2) 'onselectedindexchanged'

Используйте 2-е событие, где мы можем добавить элементы управления и установить css, свойства .. динамически. из-за которой не удалось загрузить ошибку viewstate. но то же самое, если мы используем его в 1-м событии, это может привести к ошибке.

...