2012-01-20 5 views
7

Bu istisna dışında kimse bana yardımcı olabilir. Birkaç düzeltmeyi denedim ama hiçbir şey işe yaramadı. Bu istisnayı yalnızca IE'de (7, 8 ve 9) alıyorum.Bu sayfa için durum bilgisi geçersiz ve bozulmuş olabilir. (Sadece IE'de)

Sayfayı ilk kez yüklediğimde bir açılır menü oluşturur. Belirli bir satıcıyı seçtiğim ve sayfanın geri gönderilmesini sağlayıp gerekli bilgileri döndürür. Satıcıyı değiştirirsem hala bilgileri yükler. $ .ajax isteğini kullanarak sayfaya bir denetim yüklediğimde ve geri dönüp açılır listeyi değiştirdiğimde (farklı bir satıcı seçin), o zaman craps ve aşağıdaki istisna verdi. Yine sadece IE'de olur.

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

Bunu takip ediyorum: "Giriş, 64 olmayan bir karakter, ikiden fazla dolgu karakteri veya dolgu karakterleri arasında beyaz olmayan bir boşluk karakteri içerdiğinden geçerli bir Base-64 dizesi değil." – DOK

+1

Sanırım sorunumu biliyorum. Sayfanın üzerine dinamik denetimler (ajaxly) eklemek, görünüm değişimini değiştirir ve sayfayı geri yüklediğimizde, görünüm değiştiğinden beri bir istisna atar. tüm yer tutucuları (yani Div) sayfa çıktısında jquery kullanarak kaldırmak için bir hack kullandım. Bu, eklenen tüm görünümleri kaldırmanız anlamına gelir. burada çözümdür $ ("# VendorListDropDownSearchable") değişiklik (function() { $ ("# UserControl1DIV") kaldırmak();. $ ("# UserControl2DIV")) (kaldırma;. }.); – Tauseef

+1

Harika! Bunun probleminizi çözdüğünü onaylarsanız, lütfen buraya geri gelin ve bir cevap oluşturun. Bu, elbette burada yollarını bulacak olan diğer insanlara gerçekten yardımcı olacaktır. Bu aynı hata mesajını kendim aldım, hatırlayamadım. Kendi sorularınızı cevaplamak mükemmel derecede iyidir (SSS'de de öyle yazıyor). – DOK

cevap

11

Tamam, işte burada bulduğum çözüm/kesmek var. Benim sorunum, kullanıcı kontrolünün dinamik olarak (ajax üzerinden) sayfaya eklenmesi, sayfanın görüntü durumunu değiştirmekti ve bir istisna atıyordu. Araştırma sonucunda, görüntüleme sayfasının bir sayfanın durumunu (özellikleri ve ayarları) sakladığını öğrendim. Bir web hizmetinden html denetimlerini döndürdüğünüzde, sayfa üzerinde saklanan bir çeşit viewtate olacaktır. Ve sunucuya geri gönderdiğinizde, sayfayı yeniden oluşturmak için viewtae'nin şifresini çözdüğünde bir istisna atar. JQuery kullanarak sayfa kontrollerini (dinamik olarak eklenen) kontrolleri kaldırdım ve problem çözüldü.

1):

//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 merhaba aynı sorun var. sadece ie. – Mohammadreza

+0

Tamamen aynı problem vardı. Cevap yazdığınız için teşekkürler! –

+0

Sadece IE9'da aynı sorunu yaşadım (sayfa IE10'da iyi çalıştı). Farklı bir ASP.Net sayfasına yönlendirmek için, C# kodunu çalıştırma girişiminde bulunmadan önce, sizinki gibi bir Javascript işlevini çağırmak için ASP.Net düğmesine OnClientClick ekledim. # 1 cevabınız için –

4

bu diğer seçeneklerin bir çift cevabı burada edildi ancak biliyorum. Eğer jquery .Load üzerinden bir web hizmeti çağrısı yapıyorsanız() sadece yükleri geri arama parametresi

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

2) kullanılarak dönüşünde Görünüm durumu kaldırabilir. Html Agility Pack'u kullanma İade edilen kontrolü gerçekleştirmeden önce, aynı şeyi bir web hizmetinde de yapabilirsiniz. Serviste bir UserControl.ascx yükleyen bir web servisi çektiğinizi ve daha sonra geri dönmeden önce html'yi oluşturduğunuzu varsayın. Benim durumumda

[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: $ ('. AspNetHidden', bu) .remove(); EnableViewState = "false", EnableViewStateMac = "false", ViewStateMode = "Disabled" iç sayfa (jquery yüklü) sayfamda denedim, bunların hiçbiri aspNetHidden div'larının üst sayfanın viewtate'sini karıştırdığı görünmesini engellemedi. (Hata benim için tüm tarayıcılara uygulanır.) –

+0

Bu asıl sorun oldu. Teşekkür ederim! – CodeIt

1

, sorun iki <form></form> etiketlerini başlamıştı.

Ana sayfamda bir TextBox var. Kullanıcı bu TextBox'ta bir değer girerse, Script başka bir sayfaya gider ve kullanıcı yazmaya devam ederken bu değeri arar. Normalde bu "başka" sayfayı Website,'u tıklatarak oluşturdum. Yani Visual Studio benim için yeni bir sayfa oluşturdu. Her zamanki gibi bu yeni sayfada da <form></form> etiketi vardı. Bu yüzden bu etiketleri sildim ve sorun çözüldü.

(PS:. Masterpage kullanmak Fakat aşağıda kod yalnızca benim ana sayfasında tabi) Yukarıdaki kodda serinover.aspx yılında

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

hangi should ikinci sayfası Aşağıda

benim kodlardır <form></form> etiketine sahip değil.

İlgili konular