2010-06-18 35 views
5

OK, ho appena iniziato a ricevere questo errore e non sono sicuro del perché. Ho una pagina di hosting con list list e un pannello con un controllo utente. La listview carica i record con un pulsante di collegamento. Fai clic sul pulsante di collegamento per modificare quel particolare record, che viene caricato nel formview (all'interno di usercontrol) che passa alla modalità di modifica. Dopo che si è verificato un aggiornamento nel formview, sto attivando un evento che la mia pagina di hosting sta ascoltando. La pagina di hosting quindi riassocia la listview per mostrare i dati aggiornati. Questo è tutto all'interno di un updatepanel.Impossibile caricare viewstate

Quindi questo tutte le opere - ma quando poi vado a cliccare su un LinkButton diversa ottengo l'errore qui sotto:

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. 

Qualche suggerimento su come risolvere?

Il mio listview sembra essere in fase di rebound con successo - Posso vedere i miei dati modificati .. Solo non so perché si lamenta di viewstate quando clicco sul pulsante link. O c'è un modo migliore per aggiornare i dati nel mio listview? Il mio listview e formview sono legati alle fonti objectdata (nel caso che importi)

Grazie per l'aiuto!

Ecco il codice sotto il mio controllo. Altre persone hanno commentato su questo errore di essere in relazione alla modifica della modalità di formview ma hanno provato un paio di modifiche senza successo:

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 qui è la mia pagina aspx - dispiace resi conto che potrebbe aiutare dopo aver lasciato l'ufficio per prendi cibo :) hanno messo un commento prima del mio ListView che contiene quella parola ..

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

mio controllo utente:

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

Gli unici controlli dinamici a cui riesco a pensare - è perché il comando itemviewplaces contiene un controllo utente. E come sto chiamando un rebind sul listview sarà diverso per la prima volta che la pagina caricata. Ma devo aggiornare la listview in qualche modo per riflettere i nuovi dati. Oppure il problema è più relativo al pannello di aggiornamento? – Jen

+0

Rimosso il mio updatepanel e ho ancora lo stesso errore. Inoltre ho provato a commentare il database della mia visualizzazione di lista e ancora ottengo lo stesso errore .. quindi è ovviamente qualcos'altro. – Jen

+0

Ho provato a impostare il viewstate in modo che fosse disabilitato sia sul mio listview che sul mio formview, e così facendo ho portato la pagina a non funzionare come dovrebbe. Quando ho cliccato sul mio linkbutton, la griglia avrebbe perso i suoi articoli .. o il controllo non sarebbe stato visualizzato in modalità modifica. – Jen

risposta

1

Bene, sembra che il mio problema sia correlato al formview e alla modifica delle modalità.

Ho finito per creare un secondo controllo usc con una formview che ha solo il modello di elemento di modifica e ho impostato la modalità predefinita da modificare.Usando questo per la modifica, e quello originale per la visualizzazione delle tariffe si è sbarazzato dell'errore del viewstate.

Ovviamente non è l'ideale dato che non dovrei farlo, ma mentre provavo a forzare a non passare alla modalità di sola lettura dopo aver salvato le modifiche, nulla di ciò che ho provato avrebbe impedito l'errore di stato di visualizzazione. Ho trascorso abbastanza tempo su questo problema - è ora di andare avanti !! Grazie per i suggerimenti anche se persone :)

4

E 'difficile dare una risposta esatta senza guardare attraverso la vostra intera pagina aspx, ma in generale problemi come questo si verificano quando modifichi elementi che hanno viewstate abilitato usando javascript. Quando si esegue il postback sul proprio server (facendo clic su un pulsante di collegamento, ad esempio), il viewstate della pagina è diverso da quello che il server sta cercando, quindi si blocca. Questa è una misura di sicurezza.

Stai utilizzando AJAX tramite un pannello di aggiornamento? Avete alcune parti della vostra pagina in un pannello di aggiornamento e altre no? Forse il tuo evento sta aggiornando alcuni controlli e non altri.

Potrebbe fornire una versione annotata della pagina ASPX che potremmo esaminare?

2

Anche questo problema era il mio recente incubo. Ci sono molte possibilità che possono portare a finire con l'errore "Fail to load viewstate". La maggior parte delle volte è correlata a controlli creati in modo dinamico e proprietà .Visibili dei controlli che possono modificare la gerarchia dei controlli aggiunti alla pagina.

Per quanto ne so, il problema potrebbe riguardare le proprietà Visibili dei controlli. Si prega di provare a rimuovere il database prima di proprietà Visible e vedere come sta andando.

<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

Grazie per il suggerimento - ma nessuna gioia. Continua a ricevere l'errore dopo aver rimosso tutte le proprietà visibili sui valori letterali. – Jen

5

Ho combattuto con questo problema per diverse ore e giorni. Nessuna delle risposte che ho trovato ha risolto completamente il mio problema, ma alla fine ho trovato una soluzione.

Il mio scenario è il seguente. Ho un GridView e un FormView. Questi sono su due viste di un controllo MultiView. Visualizzo un elenco di dati in GridView. Il mio pulsante di modifica passa a FormView perché ci sono più campi che voglio modificare che si adatteranno in una linea orizzontale sul gridview (senza scorrimento orizzontale).

Se si annulla dalla modalità di modifica di FormView e si torna a GridView (utilizzo un evento OnClick per eseguire questa operazione), la volta successiva che si verifica un postback, viene visualizzato un errore di ViewState.

Se si annulla dalla modalità di modifica di FormView e si passa semplicemente alla modalità ReadOnly e quindi si annulla il ritorno a GridView, tutto funziona correttamente.

SOLUZIONE: La soluzione era impostare la modalità predefinita di FormView su "Modifica". La mia teoria è che se la modalità predefinita di FormView è "ReadOnly", quando si annulla dalla modalità di modifica di FormView, al successivo caricamento della pagina, si tenta di applicare il ViewState della modalità di modifica alla modalità ReadOnly (l'impostazione predefinita quando la pagina viene caricata). Impostando la vista predefinita su "Modifica", il ViewState che è stato salvato con la modalità di modifica viene ricaricato nella nuova modalità di modifica (impostazione predefinita) dopo il caricamento della pagina.

Questo succede anche se l'attuale ActiveView del MultiView sta visualizzando la griglia e non il modulo.

non ho avuto alcun problema ViewState in quanto la commutazione della modalità di default del FormView a "Modifica"

Spero che questo aiuti, e accolgo con favore eventuali commenti.

Grazie.

Harv Sather

0

impossibile caricare viewstate ciò si verifica principalmente durante l'uso pochi costruito in comandi per i controlli ASP che cambia la vista con instace post-retro o evento asincrono Postback

Esempio: Controlli come Gridview , Multiview, Formview, Listview.

Per tutti i controlli di cui sopra gli eventi di comando come 'edit' (che Convers modalità di modifica), a questo punto non c'è 2 evento esiste come 1) 'onrowediting' 2) 'onrowedited' Nota 2 ° evento does't esiste. se si sta tentando di aggiungere dinamicamente controlli a questo punto 'Impossibile caricare viewstate'.

Soluzione: Abbiamo bisogno di usare i comandi come 'select' che ha entrambi gli eventi separati come 1) 'onselectedindexchanging' e 2) 'onselectedindexchanged'

Usa 2 eventi ° dove possiamo aggiungere controlli e SET il css, proprietà .. dinamicamente. che non riuscirà a caricare l'errore di visualizzazione dello stato di visibilità. ma lo stesso se lo usiamo in 1a eventualità può lanciare l'errore.

Problemi correlati