2012-01-20 7 views
7

誰もがこの例外で私を助けることができます。私はいくつかの修正を試みましたが、何も機能しませんでした。 IE(7,8,9)でのみこの例外が発生しています。このページの状態情報は無効であり、破損している可能性があります。 (IEのみ)

初めてページを読み込むと、ドロップダウンが表示されます。私は特定のベンダーを選択し、ページのポストバックを行い、必要な情報を返します。私がベンダーを変更しても、情報はロードされます。 $ .ajaxリクエストを動的に使用してページにコントロールをロードするときに戻ってドロップダウン選択を変更する(別のベンダーを選択する)と、クラップアウトされて次の例外が表示されます。再度、IEでのみ発生します。

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:\Users\tmalik\AppData\Local\Temp\Temporary ASP.NET Files\root\6691c708\751e6443\App_Web_a3kdfsht.2.cs Line: 0 

Stack Trace: 


[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. 
    Client IP: 127.0.0.1 
    Port: 
    Referer: http://localhost:57289/vendor.aspx 
    Path: /vendor.aspx 
    User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; MDDR) 
    ViewState: 2D1IMRanPXfVARbRp1ooiwD71WHybNzxSNLbbA0G3MxKeo7m52dHWLBPGdnMH5JthTnPVt7UES/PVx39dfZYHbr0/DL7J58mvA2I4wRUSdDShVxvZqC7ZPZWcatowpZ7VYaD9PFKW7OkgppCwmePFuYnpU8kWDT5TvSLqN50Flrqpv0zCM9YoCKemfesa68rqBkkSTijcxnxdDCgvzSl72giI4ZhwK92wD22Ma6scW4PFjRZeTsKoowJq+JqJGuBMEepwKguFUy4dX86UIULnJ7NQsgZW1aQvpZdnfSRCSYrWhFWPhKTPsS622eaQYShsxddPs/mfEB26f54WS+iBYuk3mWm8jr6sWvsOIRtwH8b3E/5UujbgAxTNVg8BhzpSFvmE4KwGKo0tKuuqOFtP0pjpaAI7fV3EQ1M7BVQSAVrtBevRFJ0PlCPrU2aQms2LVeE5POqTJGtY+74xWkdCtLzT04Ug4R+SMBRElQBqX/5A54OHj2ghYjJ/3tgg4ToGUX2xrQ/c70lrphP+kabGVM2Op4DFjZAaOZj/CDVUurH2BYXKuJdUvzbf2zHngoOnqZGqrw3n6V6HGcnHNKxfuGQ20MPdxJYCbYHGiRqixzV1NxJoHFHbYCVx3IlrqF0W44AFKm2gzzk3V8zu9lUjyFNvUNBMjNaZeekLtcWpszhKrm8WhVnWQAk1CXxKJqyK0RC3...] 

[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) +235 
    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.vendor_aspx.ProcessRequest(HttpContext context) in c:\Users\tmalik\AppData\Local\Temp\Temporary ASP.NET Files\root\6691c708\751e6443\App_Web_a3kdfsht.2.cs:0 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +100 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75 
+1

私はこれを追いかけようとしています: "入力は、ベース以外の64文字、2つ以上のパディング文字、またはパディング文字の間に空白以外の文字が含まれているため、有効なBase-64文字列ではありません。 – DOK

+1

私は自分の問題を知っていると思う。動的なコントロール(ajaxly)をページに追加するとviewstateが変更され、ページをポストバックすると、viewstateが変更されたため例外がスローされます。私は、ページポストのjqueryを使用して、すべてのプレースホルダ(すなわちDiv)を削除するためにハックを使用しました。これは、追加されたviewstateをすべて削除することを意味します。ここ は、私の解決策は $( "#VendorListDropDownSearchable")である(関数()に変更。{ $( "#UserControl1DIV")を削除();。 $( "#UserControl2DIV")(削除);。 } ); – Tauseef

+1

素晴らしい!これで問題が解決することを確認したら、ここに戻って回答を作成してください。それは確かにここに彼らの道を見いだす他の人を本当に助けるでしょう。私はこのまったく同じエラーメッセージを自分で持っていましたが、覚えていませんでした。あなた自身の質問に答えることはまったくいいです(それはFAQでそう言います)。 – DOK

答えて

11

ここでは、私が思いついた解決策/ハックがあります。私の問題は、動的に(ajaxリクエストを介して)ユーザーコントロールをページに追加すると、ページの表示状態が変更され、例外がスローされてしまうことでした。研究の結果、viewstateにページの状態(プロパティと設定)が格納されていることがわかりました。 Webサービスからコントロールhtmlを返すと、ある種のviewstateがページに格納されます。また、サーバーにポストバックすると、viewstaeを復号してページを再構築するときに例外がスローされます。私は単にjqueryを使用してページのポストバックにこれらのコントロール(動的に追加された)を削除し、問題が解決されました。

//In my case "VendorListDropDownSearchable", causes the page post back. 
    $("#VendorListDropDownSearchable").change(function() { 
     $("#UserControl1DIV").remove(); //removing the place holder holding control1 
     $("#UserControl2DIV").remove(); //same as above 
    }); 
+0

Tauseef @ Tauseefこんにちは、同じ問題があります。すなわち、すなわち。 – Mohammadreza

+0

全く同じ問題がありました。回答を投稿していただきありがとうございます! –

+0

私はIE9でも同じ問題を抱えていましたが(IE10でもうまく機能しました)私はASP.NetボタンにOnClientClickを追加して、C#コードを実行しようとする前に、別のASP.NetページにリダイレクトするようなJavascript関数を呼び出す必要がありました。 –

4

私はこれが回答されている知っているが、ここでは他のオプションのカップルです:

1)。あなたはjqueryの.LOADを経由してWebサービスの呼び出しをやっている場合は()あなただけ

$('#myDiv').load('/MyPage.aspx', null, function(){ 
    $('.aspNetHidden', this).remove(); // removes viewstate from returned aspx html 
}); 

2負荷のコールバックパラメータを使用して、復帰時にビューステートを削除することができます)。 Html Agility Packの使用返されたコントロールをレンダリングする前に、同じことをWebサービスで行うことができます。あなたがサービスでUserControl.ascxをロードし、HTMLのレンダリングを行う前にWebサービスを呼び出しているとします。私の場合は

[WebMethod(EnableSession = true)] 
[System.Web.Script.Services.ScriptMethod] 
public string GetControlHtml() 
{ 

// do stuff to get the control you want 

.... 

Page page = new Page(); 
HtmlForm form = new HtmlForm(); 
var ctl = (MyControlsNameSpace.Controls.MyControl)page.LoadControl("Controls\\MyControl.ascx"); 

page.Controls.Add(form); 
form.Controls.Add(ctl); 
StringWriter result = new StringWriter(); 
HttpContext.Current.Server.Execute(page, result, false); 

// Extension Method RemoveViewStateFromControl 
var MyControlsHTML = result.RemoveViewStateFromControl(); 
return MyControlsHTML; 

} 

..... 

// In an extensions class.... 
public static string RemoveViewStateFromExecuteControl(this StringWriter writer) 
    { 
     HtmlAgilityPack.HtmlDocument Doc = new HtmlDocument(); 
     Doc.LoadHtml(writer.ToString()); 
     var Divs = Doc.DocumentNode.SelectNodes("//div"); 
     if (Divs != null) 
     { 
      foreach (var Tag in Divs) 
      { 
       if (Tag.Attributes["class"] != null) 
       { 
        if (string.Compare(Tag.Attributes["class"].Value, "aspNetHidden", StringComparison.InvariantCultureIgnoreCase) == 0) 
        { 
         Tag.Remove(); 
        } 
       } 
      } 
     } 

     return Doc.DocumentNode.OuterHtml; 
    } 
+1

あなたの#1答えに+1:$( '。aspNetHidden'、this).remove(); EnableviewState = "false"、EnableViewStateMac = "false"、ViewStateMode = "無効"を試みましたが、aspNetHidden divが親ページのviewstateを乱してしまうのを防ぐことはできませんでした。 (私のためにすべてのブラウザにエラーが適用されました) –

+0

これは実際の問題でした。ありがとうございました! – CodeIt

1

、問題は2個の<form></form>のタグを持っていました。

メインページにTextBoxがあります。ユーザーがこのTextBoxに値を入力すると、スクリプトは別のページに移動し、ユーザーが書き込みを続けている間にその値を検索します。通常はWebsiteAdd New Itemをクリックしてこの別のページを作成しました。 Visual Studioは私のために新しいページを作成しました。この新しいページには通常通り、<form></form>タグもありました。だから私はこのタグを削除し、問題は解決されました。以下は

は私のコードです:

:上記のコードserinover.aspxで(PS。私はマスターページを使用する。しかし、以下のコードは唯一の私のメインページで必要とされる)

Dim scriptText As String 
    scriptText = "" 
    scriptText += "function serinogoster(str) {" + Chr(10) 
    scriptText += "var xhttp;" + Chr(10) 
    scriptText += "if (str == '') {" + Chr(10) 
    scriptText += "document.getElementById('ctl00_ContentPlaceHolder1_Label19').innerHTML = '';" + Chr(10) 
    scriptText += "return;" + Chr(10) 
    scriptText += "}" + Chr(10) 
    scriptText += "xhttp = new XMLHttpRequest();" + Chr(10) 
    scriptText += "xhttp.onreadystatechange = function() {" + Chr(10) 
    scriptText += "if (this.readyState == 4 && this.status == 200) {" + Chr(10) 
    scriptText += "document.getElementById('ctl00_ContentPlaceHolder1_Label19').innerHTML = this.responseText;" + Chr(10) 
    scriptText += "}" + Chr(10) 
    scriptText += "};" + Chr(10) 
    scriptText += "xhttp.open('GET', 'serinover.aspx?serino='+str, true);" + Chr(10) 
    scriptText += "xhttp.send();" + Chr(10) 
    scriptText += "}" + Chr(10) 
    Me.ClientScript.RegisterClientScriptBlock(Me.GetType(), "OnKeyUpScript", scriptText, True) 
    TextBox6.Attributes.Add("onkeyup", "serinogoster(this.value);") 

はすべき2ページ目です<form></form>タグがありません。

関連する問題