2010-08-13 1 views
5

Je travaille sur un projet Asp.net où j'ai créé des contrôles utilisateur sur la page dynamiquement via LoadControl() sur l'objet Page, mais quand j'essaie de faire de la publication sur n'importe quelle page je reçois "The state information is invalid for this page and might be corrupted." même si j'ai défini Viewstate du contrôle créé dynamiquement sur false.Comment corriger les informations d'état n'est pas valide pour cette page et pourrait être corrompue

Si vous avez fait face à ce problème s'il vous plaît dites-moi comment vous l'avez réparé.

La trace de la pile est: -

[FormatException: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or a non-white space character among the padding characters. ] 
    System.Convert.FromBase64String(String s) +0 
    System.Web.UI.ObjectStateFormatter.Deserialize(String inputString) +77 
    System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Deserialize(String serializedState) +4 
    System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter, String serializedState) +37 
    System.Web.UI.HiddenFieldPageStatePersister.Load() +147 

[ViewStateException: Invalid viewstate. 

[HttpException (0x80004005): The state information is invalid for this page and might be corrupted.] 
    System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError) +198 
    System.Web.UI.ViewStateException.ThrowViewStateError(Exception inner, String persistedState) +14 
    System.Web.UI.HiddenFieldPageStatePersister.Load() +251 
    System.Web.UI.Page.LoadPageStateFromPersistenceMedium() +106 
    System.Web.UI.Page.LoadAllState() +43 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +8431 
    System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +253 
    System.Web.UI.Page.ProcessRequest() +78 
    System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context) +21 
    System.Web.UI.Page.ProcessRequest(HttpContext context) +49 
    ASP.contact_us_aspx.ProcessRequest(HttpContext context) in c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\otherland_ecom\33f31476\6c5f9007\App_Web_zgmfrrfa.14.cs:0 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +100 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75 
+0

Sonne comme un problème de sérialisation - s'il vous plaît fournir plus d'informations sur la façon dont vous avez sérialisé vos commandes voir Etat. –

+0

à quel moment du cycle de vie chargez-vous le contrôle, et le chargez-vous sur toutes les demandes (pas seulement! Ispostback)? – Steven

+0

Le premier endroit à vérifier, étant donné l'exception, est quel type de types vous sérialiser dans viewstate sur la demande précédente (pas la publication qui lance l'exception). Quelque chose que vous mettez dans le champ caché? –

Répondre

1

Pouvez-vous s'il vous plaît assurez-vous que les contrôles dynamiques sont chargés avant Page_Load. Vous pouvez les charger dans Page_Init. (Pas besoin d'assigner des valeurs car elles seront assignées à partir de viewstate).

2

Set EnableEventValidation false dans la page de conception (.aspx)

<%@ Page Title="Home Page" EnableEventValidation="false" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" 
CodeFile="Default.aspx.cs" Inherits="_Default" %> 
+2

Ce n'est pas une bonne idée. Il est fortement recommandé de ne pas désactiver la validation d'événement. Cette fonctionnalité réduit le risque de demandes de publication et de rappels non autorisés ou malveillants. – User

+0

Cela ne fonctionne pas pour moi. Tout ce que j'ai c'est runat = textareas serveur – fahadash

0

Je pense que u ont ajouté le contrôle après méthode Page_Load. lorsque vous ajoutez le contrôle ajouter le champ caché qui est essayer de mach quand poster page retour il ne mach avec le champ caché initial de sorte qu'il augmente l'erreur lorsque vous ajoutez dynamiquement contrôle supprimer son champ caché puis il va résoudre ton problème.

-1

J'ai changé de stockage Viestate pour Session et ce problème a disparu. Lorsque la session prend fin ma connexion expire si la page est obligé de recharger et rester valide:

//ViewState["startConversion"] = false; 
Session["startConversion"] = false; 

Ou

<asp:HiddenField ID="hfStartConversion" runat="server" /> 
Questions connexes