2012-01-20 6 views
7

क्या कोई इस अपवाद के साथ मेरी मदद कर सकता है। मैंने कुछ फिक्सेस की कोशिश की है लेकिन कुछ भी काम नहीं किया है। मुझे केवल आईई (7, 8 और 9) में यह अपवाद मिल रहा है।राज्य की जानकारी इस पृष्ठ के लिए अमान्य है और दूषित हो सकती है। (केवल आईई में)

जब मैं पहली बार पृष्ठ लोड करता हूं, तो यह एक ड्रॉपडाउन लाता है। जहां मैं एक विशिष्ट विक्रेता का चयन करता हूं और यह पृष्ठ को वापस पोस्ट करता है और आवश्यक जानकारी देता है। अगर मैं विक्रेता बदलता हूं तो यह अभी भी जानकारी लोड करेगा। जब मैं गतिशील रूप से $ .ajax अनुरोध का उपयोग करके पेज पर नियंत्रण लोड करता हूं और वापस जाने और ड्रॉपडाउन चयन को बदलने (एक अलग विक्रेता का चयन करता हूं), यह बाहर निकलता है और मुझे निम्नलिखित अपवाद देता है। फिर यह केवल आईई में होता है।

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 स्ट्रिंग नहीं है क्योंकि इसमें गैर-बेस 64 वर्ण, दो से अधिक पैडिंग वर्ण या पैडिंग वर्णों के बीच एक गैर-सफेद स्पेस कैरेक्टर शामिल है।" – DOK

+1

मुझे लगता है कि मैं अपनी समस्या जानता हूं। पृष्ठ पर गतिशील नियंत्रण (AJAXly) जोड़ना व्यूस्टेट को बदलता है और जब हम पृष्ठ को वापस पोस्ट करते हैं तो यह एक अपवाद फेंकता है क्योंकि व्यूस्टेट बदल गया है। मैंने पेजपॉस्ट बैक पर jquery का उपयोग करके सभी प्लेसहोल्ड (यानी Div) को हटाने के लिए एक हैक का उपयोग किया है। जिसका अर्थ है सभी अतिरिक्त व्यूस्टेट को हटा देना। यहां मेरे समाधान है $ ("# VendorListDropDownSearchable") परिवर्तन (function() { $ ("# UserControl1DIV") को हटाने();। $ ("# UserControl2DIV") को हटाने();। }।); – Tauseef

+1

बढ़िया! यदि आप पुष्टि करते हैं कि यह आपकी समस्या हल करता है, तो कृपया यहां वापस आएं और एक उत्तर बनाएं। इससे वास्तव में अन्य लोगों की मदद मिलेगी जो निश्चित रूप से यहां अपना रास्ता खोज लेंगे। मेरे पास यह वही त्रुटि संदेश स्वयं है, बस याद नहीं किया जा सका। अपने प्रश्नों का उत्तर देना बिल्कुल ठीक है (यह एफएक्यू में ऐसा कहता है)। – DOK

उत्तर

11

ठीक है, तो यहां समाधान/हैक मैं आया हूं। मेरी समस्या यह थी कि पृष्ठ पर गतिशील रूप से उपयोगकर्ता नियंत्रण (AJAX अनुरोध के माध्यम से) जोड़ना पृष्ठ की दृश्य स्थिति बदल रहा था और अपवाद फेंक रहा था। शोध पर मैंने पाया कि व्यूस्टेट एक पृष्ठ (गुण और सेटिंग्स) की स्थिति को संग्रहीत करता है। एक बार जब आप वेब सेवा से नियंत्रण एचटीएमएल वापस कर देते हैं, तो पेज पर संग्रहीत कुछ प्रकार के व्यूस्टेट होने जा रहे हैं। और जब आप सर्वर पर वापस पोस्ट करते हैं, तो यह पृष्ठ को पुनर्निर्माण करने के लिए व्यूस्टे को डिक्रिप्ट करते समय अपवाद फेंक देगा। मैंने jquery का उपयोग करके पृष्ठ पोस्ट पर उन नियंत्रणों को हटा दिया है (जो गतिशील रूप से जोड़े गए हैं) और समस्या हल हो गई है।

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 hi एक ही समस्या है। केवल यानी में। – Mohammadreza

+0

पूरी तरह से एक ही समस्या थी। उत्तर पोस्ट करने के लिए धन्यवाद! –

+0

मुझे आईई 9 में एक ही समस्या थी (पृष्ठ हालांकि आईई 10 में ठीक काम करता है)। मुझे एक अलग ASP.Net पृष्ठ पर रीडायरेक्ट करने के लिए कुछ सी # कोड चलाने की कोशिश करने से पहले, आपके जैसे जावास्क्रिप्ट फ़ंक्शन को कॉल करने के लिए, मेरे ASP.Net बटन पर एक ऑन क्लाइंटक्लिक क्लिक करना था। आपके # 1 उत्तर के लिए –

4

मैं इस उत्तर दिया गया है, लेकिन यहाँ अन्य विकल्पों में से एक जोड़े हैं पता है। आप jQuery .load के माध्यम से एक वेब सेवा कॉल कर रहे हैं() तुम सिर्फ viewstate वापसी पर लोड कॉलबैक पैरामीटर

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

2) का उपयोग कर निकाल सकते हैं। Html Agility Pack का उपयोग करके आप लौटा नियंत्रण प्रस्तुत करने से पहले एक ही वेब सेवा में ऐसा ही कर सकते हैं। मान लीजिए कि आप एक वेब सेवा बुला रहे हैं जो सेवा में UserControl.ascx लोड करता है और फिर लौटने से पहले इसका HTML प्रस्तुत करता है।

[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', यह) .remove(); मैंने EnableViewState = "false", EnableViewStateMac = "false", ViewStateMode = "अक्षम" को अपने आंतरिक (jquery loaded) पृष्ठ पर आजमाया, इनमें से कोई भी aspNetHidden divs को प्रकट होने से रोकता है जो पैरेंट पेज के व्यूस्टेट को गड़बड़ कर देता है। (त्रुटि मेरे लिए सभी ब्राउज़रों पर लागू होती है।) –

+0

यह वास्तविक समस्या थी। धन्यवाद! – CodeIt

1

मेरे मामले में, समस्या दो <form></form> टैग रहा था।

मेरे पास मेरे मुख्य पृष्ठ में टेक्स्टबॉक्स है। यदि उपयोगकर्ता इस टेक्स्टबॉक्स में कोई मान दर्ज करता है, तो एक स्क्रिप्ट किसी अन्य पृष्ठ पर जाती है और उस मूल्य की खोज करती है जब उपयोगकर्ता इसे लिखना जारी रखता है। आम तौर पर मैंने Website, Add New Item पर क्लिक करके यह "दूसरा" पृष्ठ बनाया है। तो विजुअल स्टूडियो ने मेरे लिए एक नया पेज बनाया। सामान्य रूप से इस नए पृष्ठ में <form></form> टैग भी था। इसलिए मैंने इस टैग को हटा दिया और समस्या हल हो गई।

(पुनश्च::। मैं masterpage का उपयोग लेकिन नीचे कोड केवल अपने मुख्य पृष्ठ में की जरूरत है)

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

ऊपर कोड serinover.aspx में जो चाहिए दूसरे पृष्ठ है

नीचे मेरी कोड हैं <form></form> टैग नहीं है।