OK habe gerade angefangen, diesen Fehler zu bekommen und ich bin mir nicht sicher warum. Ich habe eine Hosting-Seite, die eine Listenansicht und ein Panel mit einer Benutzersteuerung hat. Die Listenansicht lädt Datensätze mit einer Verknüpfungsschaltfläche. Sie klicken auf den Link-Button, um den betreffenden Datensatz zu bearbeiten. Dieser wird in der Formularansicht (innerhalb des Benutzerkontrols) geladen, die in den Bearbeitungsmodus übergeht. Nach einem Update in der Formview trigger ich ein Ereignis, auf das meine Hosting-Seite hört. Die Hostseite binnt die Listenansicht erneut, um die aktualisierten Daten anzuzeigen. Dies ist alles in einem Update-Panel.Fehler beim Laden von viewstate
Also das alles funktioniert - aber wenn ich dann auf einem anderen Linkbutton ich die folgenden Fehler erhalten klicken:
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.
Vorschläge, wie zu beheben?
Meine Listview scheint erfolgreich rebound zu sein - ich kann meine geänderten Daten sehen .. Ich weiß nur nicht, warum sie sich über Viewstate beschwert, wenn ich auf den Linkbutton klicke. Oder gibt es eine bessere Möglichkeit, die Daten in meiner Listenansicht zu aktualisieren? Meine Listenansicht und Formularansicht sind an Objektdatenquellen gebunden (falls es darauf ankommt)
Vielen Dank für die Hilfe!
Hier ist der Codebehind meiner Kontrolle. in Beziehung zu seinem Andere Leute haben zu diesem Fehler kommentieren den Modus der Formview zu ändern, aber haben ein paar Änderungen ohne Erfolg versucht:
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 hier ist mein aspx Seite - sorry erkennt, dass helfen könnte, nachdem ich das Büro verlassen zu nimm Essen. :) Haben Sie einen Kommentar, bevor mein Listview setzen, dieses Wort enthält ..
<%@ 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>
Meine Benutzersteuerung:
<%@ 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>
Die einzige dynamische Steuerelemente, die ich mir vorstellen kann - ist, weil die Listview ItemTemplate ein Benutzersteuerelement enthält. Und da ich eine Rebind auf der Listview anrufe, wird es anders sein als beim ersten Laden der Seite. Aber ich muss die Listview irgendwie aktualisieren, um die neuen Daten widerzuspiegeln. Oder ist das Problem mehr Update-Panel verwandt? – Jen
Entfernte mein Updatepanel und ich bekomme immer noch den gleichen Fehler. Habe auch versucht die Databind meiner Listenansicht zu kommentieren und bekomme trotzdem den selben Fehler .. so ist offensichtlich noch was anderes. – Jen
Versucht, ViewState auf meine ListView und/oder meine Formview deaktiviert werden - und so führte die Seite nicht so, wie es sollte. Wenn ich auf meine Verknüpfungsschaltfläche geklickt habe, würde entweder das Gitter seine Elemente verlieren .. oder das Steuerelement würde nicht im Bearbeitungsmodus angezeigt werden. – Jen