2011-07-05 21 views
0

私はこの例外をdropdownlistからのポストバックで取得しています。 注:Dropdownlistは、値型としてBigIntとバインドされ、その値はusercontrolにバインドされます。 私はドロップダウンリストで値を選択したとき、私はこの例外を取得しています:エラー:このページの状態情報は無効であり、破損している可能性があります

The state information is invalid for this page and might be corrupted. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Web.HttpException: The state information is invalid for this page and might be corrupted. 

Source Error: 

[No relevant source lines] 


Source File: c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\074f73f4\bcce5747\App_Web_j32tj0nd.0.cs Line: 0 

Stack Trace: 

[FormatException: Input string was not in a correct format.] 
    System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) +9594283 
    System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) +119 
    System.Convert.ToInt32(String value, IFormatProvider provider) +48 
    System.Web.UI.Page.get_RequestViewStateString() +245 

[ViewStateException: Invalid viewstate. 
    Client IP: ::1 
    Port: 2479 
    Referer: http://localhost:89//home.aspx?catid=8 
    Path: /home.aspx 
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.18) Gecko/20110614 AskTbPTV2/3.12.2.16749 Firefox/3.6.18 GTB7.1 
    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.Page.get_RequestViewStateString() +567 
    System.Web.UI.HiddenFieldPageStatePersister.Load() +241 
    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.home_aspx.ProcessRequest(HttpContext context) in c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\074f73f4\bcce5747\App_Web_j32tj0nd.0.cs:0 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +100 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75 

を私はGoogleに行われ、のようなものがたくさん試してみました:WebConfigの中 :

<pages maxPageStateFieldLength="40" 

ValidateRequest="false" 

を解決策はありません。

専門家は私に解決策を教えてください。過去数時間から私はこの問題に直面しています。以前はうまくいきました。

編集:注:私は今テストしたところ、UCが他のページ「テストページ」で正常に動作していることがわかりました。私はそれがいくつかのものと矛盾している必要があります...提案してください。

答えて

0

最後に私は問題を解決しましたが、それでも私はそれの理由を理解することはできません。 私のページが含まれた:私のページで

public bool ShowTabbedFlash 
     { 
      get { return showTabbedFlash; } 
      set { showTabbedFlash = value; } 
     } 

protected void Page_Load(object sender, EventArgs e) 
     { 
      if (ShowTabbedFlash) 
      { 
       UserControls.TabbedFlash tf = (UserControls.TabbedFlash)Page.LoadControl("UserControls/TabbedFlash.ascx"); 
       Phtabbedflash.Controls.Add(tf); 
      } 
     } 

<%@ MasterType VirtualPath="~/Main.Master" %> 

コードで私が設定された値

私のマスターページは、プロパティが含まれてい

私のような問題を解決しますマスターページのプロパティ:

private void ShowTabbedFlash() 
     { 
      Master.ShowTabbedFlash = true; 
     } 

今私は、マスターページのプロパティ

// Master.ShowTabbedFlash = true; 

とその開始...細かい作業

専門家の値を変更するコードをコメントしている時に私にいくつかの知識を提供してくださいその理由理由マスターページのプロパティのその出来事?

+0

私の解答を参照してください。 – VinayC

2

あなたの問題はページ/コントロールのライフサイクル - ポストバック時にコントロールツリーを変更(またはコントロールを動的に読み込む)に関連しています。 ASP.NETでは、同じコントロールツリーが存在する必要があります。そうでなければ、ビューステートを正しくロードできず、エラーが発生します。

だから、あなたのための犯人はコードを下回っている:

通常
if (ShowTabbedFlash) 
{ 
    UserControls.TabbedFlash tf = UserControls.TabbedFlash)Page.LoadControl("UserControls/TabbedFlash.ascx"); 
    Phtabbedflash.Controls.Add(tf); 
} 

、コントロールIDを照合することによって、ツリーマッチング作業を制御する - idを提供しないことで、ASP.NETコントロールのIDを生成します - これらはポストに変更されます場合には-backを実行すると、ASP.NETの実行時に特定のIDに対して誤ったコントロールタイプが発生し、ビューステート、したがってエラーが復元されます。いくつかの特定のIDをあなたのユーザコントロールに与えてください。それは動作するはずです(同様のロジックは、ページ上の他の場所やユーザコントロール内の動的にロードされるコントロールにも適用されます)。たとえば、

if (ShowTabbedFlash) 
{ 
     UserControls.TabbedFlash tf = UserControls.TabbedFlash)Page.LoadControl("UserControls/TabbedFlash.ascx"); 
     tf.ID = "SomeUniqueID"; 
     Phtabbedflash.Controls.Add(tf); 
} 
+0

それは私のために働いていません:( –

+0

あなたはmasterのpage_initに関連するコードを移動してみてください。 – VinayC

+0

まだそれのために問題が.. –

関連する問題