2010-06-18 5 views
5

OK commence juste à recevoir cette erreur et je ne sais pas pourquoi. J'ai une page d'hébergement qui a listview et un panneau avec un usercontrol. La listview charge les enregistrements avec un bouton de lien. Vous cliquez sur le bouton de lien pour modifier cet enregistrement particulier - qui est chargé dans le formview (dans le contrôle userc) qui passe en mode d'édition. Après une mise à jour dans le formview, je déclenche un événement que ma page d'hébergement écoute. La page d'hébergement redéfinit ensuite la liste pour afficher les données mises à jour. Tout est dans un panneau de mise à jour.Échec du chargement de viewstate

Donc tout cela fonctionne - mais quand je vais ensuite cliquer sur un autre linkbutton je reçois l'erreur suivante:

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. 

Toutes les suggestions sur la façon de corriger?

Mon listview semble être en train de rebondir avec succès - je peux voir mes données modifiées .. Je ne sais pas pourquoi son se plaindre de viewstate quand je clique sur le bouton de lien. Ou y a-t-il un meilleur moyen de mettre à jour les données dans ma listview? Ma listview et formview sont liés à des sources de données d'objet (au cas où)

Merci pour l'aide!

Voici le codebehind de mon contrôle. D'autres personnes ont commenté cette erreur étant en relation avec le changement du mode de formview mais ont essayé quelques changements sans succès:

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(); 
    } 
} 

OK ici est ma page ASPX - désolé réalisé qui pourrait aider après avoir quitté le bureau saisir de la nourriture. :) ont mis un commentaire avant mon listview contenant ce mot ..

<%@ 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> 

Mon contrôle utilisateur:

<%@ 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> 
+0

Les seuls contrôles dynamiques que je peux penser - est parce que le listtemplate itemview contient un contrôle d'utilisateur. Et comme j'appelle un rebind sur la liste, il sera différent de la première fois que la page sera chargée. Mais je dois actualiser le listview pour refléter les nouvelles données. Ou le problème est-il davantage lié au panneau de mise à jour? – Jen

+0

Retiré mon updatepanel et j'ai toujours la même erreur. J'ai aussi essayé de commenter la base de données de ma vue de liste et j'ai toujours la même erreur ... donc c'est évidemment quelque chose d'autre. – Jen

+0

J'ai essayé de définir viewstate pour qu'il soit désactivé à la fois sur ma listview et/ou ma vue de formulaire - et cela a conduit à une page qui ne fonctionnait pas comme elle aurait dû. Lorsque je cliquais sur mon bouton de lien, la grille perdait ses éléments .. ou le contrôle ne s'affichait pas en mode édition. – Jen

Répondre

1

Eh bien, il semble que mon problème est lié au formview et au changement de mode.

J'ai fini par créer un second usercontrol avec un formview qui a seulement le modèle d'élément d'édition et j'ai défini le mode par défaut à éditer.En utilisant celui-ci pour l'édition, et celui d'origine pour afficher les taux a éliminé l'erreur viewstate.

Ce n'est évidemment pas idéal car je ne devrais pas avoir à le faire - mais pendant que j'essayais de le forcer à ne pas passer en mode lecture seule après avoir sauvegardé les changements - rien que j'essayais empêcherait cette erreur viewstate. Passé assez longtemps sur cette question déjà - temps d'aller de l'avant !! Merci pour les suggestions si les gens :)

4

Il est difficile de vous donner une réponse exacte sans regarder à travers toute votre page ASPX, mais en général de tels problèmes se produisent lorsque vous modifiez des éléments dont ViewState est activé à l'aide de JavaScript. Lorsque vous publiez sur votre serveur (en cliquant sur un bouton de lien, par exemple), l'état de view sur votre page est différent de celui que le serveur recherche, de sorte qu'il se bloque. Ceci est une mesure de sécurité.

Utilisez-vous AJAX via un panneau de mise à jour? Avez-vous des parties de votre page dans un panneau de mise à jour et d'autres non? Peut-être que votre événement met à jour certains contrôles et pas d'autres.

Pourriez-vous fournir une version annotée de votre page ASPX que nous pourrions examiner?

2

Ce problème a été mon récent cauchemar aussi. Il y a beaucoup de possibilités qui peuvent mener à l'erreur "Fail to load viewstate". La plupart du temps, il est lié aux contrôles créés dynamiquement et aux propriétés .Visible des contrôles qui peuvent changer la hiérarchie des contrôles ajoutés à la page. À ma connaissance, le problème peut tourner autour des propriétés visibles des contrôles. S'il vous plaît essayez de supprimer la liaison de données aux propriétés Visible d'abord et voir comment ça se passe.

<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 %>' /> 
+0

Merci pour la suggestion - mais pas de joie. Toujours obtenir l'erreur après avoir supprimé toutes les propriétés visibles sur les littéraux. – Jen

5

Je me suis battu avec ce problème pendant plusieurs heures et jours. Aucune des réponses que j'ai trouvées n'a complètement résolu mon problème, mais j'ai finalement trouvé une solution.

Mon scénario est le suivant. J'ai un GridView et un FormView. Ce sont sur deux vues d'un contrôle MultiView. J'affiche une liste de données dans GridView. Mon bouton d'édition bascule vers FormView car il y a plus de champs que je veux éditer que je ne saisis dans une ligne horizontale sur la grille (sans défilement horizontal).

Si j'annule à partir du mode d'édition de FormView et que je retourne à GridView (j'utilise un événement OnClick pour ce faire), la prochaine fois qu'une publication se produit, j'obtiens une erreur ViewState.

Si j'annule à partir du mode d'édition de FormView et que je passe simplement en mode ReadOnly, puis que j'annule pour revenir à GridView, tout fonctionne correctement.

SOLUTION: Ma solution consistait à définir le mode par défaut de FormView sur "Modifier". Ma théorie est que si le mode par défaut de FormView est "ReadOnly", quand j'annule du mode d'édition de FormView, la prochaine fois que la page se charge, elle essaye d'appliquer ViewState du mode Edit au mode ReadOnly (le défaut quand la page se charge). En définissant l'affichage par défaut sur "Modifier", ViewState qui a été enregistré avec le mode Modifier est rechargé dans le nouveau mode d'édition (par défaut) après le chargement de la page.

Tout cela se produit même si l'ActiveView actuel du MultiView affiche la grille et non le formulaire.

Je n'ai pas eu de problèmes ViewState depuis la commutation du mode par défaut du FormView « Editer »

Hope this helps, et je me réjouis des commentaires.

Merci.

Harv Sather

0

Impossible de charger viewstate cela se produit principalement en utilisant peu les commandes intégrées pour les commandes ASP qui change la vue avec instace post-retour ou d'un événement Async Postback

Exemple: contrôles comme GridviewMultiview, Formview, Listview.

Pour toutes les commandes au-dessus des événements commande comme 'edit' (qui convers en mode édition) à ce stade, il n'y a aucun événement 2 existe comme 1) 'onrowediting' 2) 'onrowedited' Remarque 2 does't événement existe. Si vous tentez d'ajouter des contrôles dynamiquement à ce stade 'Impossible de charger viewstate' se produit.

Solution: Nous avons besoin d'utiliser les commandes comme 'select' qui a deux événements distincts comme 1) 'onselectedindexchanging' et 2) 'onselectedindexchanged'

Utiliser 2 événement e où l'on peut ajouter des contrôles et ensemble le css, propriétés .. dynamiquement. qui n'a pas réussi à charger l'erreur viewstate. mais même si nous l'utilisons dans le 1er événement, il peut lancer l'erreur.