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" /> <asp:Label
ID="lblAccom" runat="server" Text="" /></li>
<li>
<asp:Label ID="Label101" runat="server" Text="Local Label" AssociatedControlID="lblLocalLabel" /> <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>
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
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
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