2012-01-20 26 views
7

Czy ktoś może mi pomóc z tym wyjątkiem. Próbowałem kilka poprawek, ale nic nie działało. Dostaję ten wyjątek tylko w IE (7, 8 i 9).Informacje o stanie są nieprawidłowe dla tej strony i mogą być uszkodzone. (Tylko w IE)

Kiedy ładuję stronę po raz pierwszy, pojawia się menu rozwijane. gdzie wybieram określonego dostawcę i powoduje, że strona jest wysyłana z powrotem i zwraca wymagane informacje. Jeśli zmienię dostawcę, nadal będzie on ładował informacje. Kiedy ładuję kontrolkę na stronę przy pomocy dynamicznego żądania $ .ajax, a następnie wracam i zmieniam wybór listy rozwijanej (wybieram innego dostawcę), to zgaduję i dałem mi następujący wyjątek. Znowu dzieje się to tylko w 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

Przepuściłbym to: "Dane wejściowe nie są prawidłowym ciągiem Base-64, ponieważ zawiera on 64-literową nie podstawową postać, więcej niż dwa naprzemienne znaki lub inny niż biały znak spacji wśród znaków dopełniających." – DOK

+1

Myślę, że znam mój problem. Dodanie dynamicznych elementów sterujących (ajaxly) na stronie zmienia stan widoku, a po wysłaniu z powrotem strony zgłasza wyjątek, ponieważ zmieniła się data. użyłem hack, aby usunąć wszystkie placeholdes (to znaczy Div) za pomocą jquery na stronie z powrotem. Co oznacza usunięcie wszystkich dodanych stanów widoku. tu jest moje rozwiązanie $ ("# VendorListDropDownSearchable") zmiana (function() { $ ("# UserControl1DIV") Usunąć();. $ ("# UserControl2DIV") Usunąć();. }.); – Tauseef

+1

Świetnie! Jeśli potwierdzisz, że to rozwiązuje twój problem, wróć tutaj i utwórz odpowiedź. To naprawdę pomoże innym ludziom, którzy na pewno znajdą tu drogę. Sam miałem ten sam komunikat o błędzie, po prostu nie mogłem sobie przypomnieć. Całkiem dobrze jest odpowiadać na własne pytania (tak jest w FAQ). – DOK

Odpowiedz

11

Ok, więc tutaj jest rozwiązanie/hack wymyśliłem. Mój problem polegał na tym, że dodanie kontrolki użytkownika dynamicznie (poprzez żądanie ajaxowe) na stronie zmieniało stan widoku strony i zgłaszało wyjątek. Po przeprowadzeniu badań dowiedziałem się, że stan witryny przechowuje stan strony (właściwości i ustawienia). Po zwróceniu kontrolki html z usługi WWW, na stronie będzie przechowywany pewien stan wyświetlania. A kiedy wyślesz z powrotem na serwer, wyrzuci wyjątek, kiedy odszyfruje on viewstae, aby odbudować stronę. Po prostu usunąłem te kontrolki (które zostały dodane dynamicznie) na stronie z powrotem za pomocą jquery i problem został rozwiązany.

//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 hi mają ten sam problem. tylko w ie. – Mohammadreza

+0

Zupełnie miał identyczny problem. Dziękujemy za przesłanie odpowiedzi! –

+0

Miałem ten sam problem tylko w IE9 (strona działała dobrze w IE10). Musiałem dodać OnClientClick do mojego przycisku ASP.Net, aby wywołać funkcję JavaScript podobną do twojej, zanim spróbuję uruchomić jakiś kod C#, aby przekierować na inną stronę ASP.Net. –

4

wiem, że to zostało odebrane, ale oto kilka innych opcji:

1). Jeśli robisz połączenie usług internetowych za pośrednictwem jquery .load() można po prostu usunąć stan wyświetlania po powrocie za pomocą ładunki parametr wywołania zwrotnego

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

2). Korzystanie z usługi Html Agility Pack Możesz zrobić to samo w usłudze sieci Web przed renderowaniem zwróconego formantu. Załóżmy, że wywołujesz usługę WWW, która ładuje UserControl.ascx w usłudze, a następnie renderuje ją przed powrotem.

[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 dla Twojej # 1 odpowiedzi: $ ('. AspNetHidden', this) .remove(); Próbowałem EnableViewState = "false", EnableViewStateMac = "false", ViewStateMode = "Disabled" na mojej stronie wewnętrznej (załadowanej jQuery), żadna z nich nie zapobiegła pojawianiu się aspNetHidden div, które zepsuły stan strony nadrzędnej. (Błąd dotyczy wszystkich przeglądarek.) –

+0

to był faktyczny problem. Dziękuję Ci! – CodeIt

1

W moim przypadku problemem było posiadanie dwóch tagów <form></form>.

Mam TextBox na mojej stronie głównej. Jeśli użytkownik wprowadzi wartość w tym polu tekstowym, skrypt przechodzi na inną stronę i przeszukuje tę wartość, podczas gdy użytkownik kontynuuje zapisywanie tej wartości. Normalnie utworzyłem tę "inną" stronę, klikając Website, Add New Item. Więc Visual Studio utworzyło dla mnie nową stronę. Jak zwykle na tej nowej stronie pojawił się także tag <form></form>. Usunąłem więc te tagi, a problem został rozwiązany.

Poniżej są moje kody:

(PS. Używam MasterPage Ale poniżej kod jest potrzebny tylko w mojej stronie głównej)

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);") 

W powyższym kodzie serinover.aspx jest druga strona, która powinna nie ma znacznika <form></form>.

Powiązane problemy