PRB: "stav zobrazenia je neplatný" chybové hlásenie pri použití Server.Transfer

Preklady článku Preklady článku
ID článku: 316920 - Zobraziť produkty, ktorých sa tento článok týka.
Rozbaliť všetko | Zbaliť všetko

Na tejto stránke

PRIZNAKY

Ak používate HttpServerUtility.Transfer ("stránka meno", TRUE), zobrazí nasledujúce chybové hlásenie:
Stav zobrazenia je neplatná pre túto stránku a môže byť poškodený

PRICINA

Tento problém sa vyskytuje, pretože EnableViewStateMac atribút <pages></pages> prvok je nastavený na pravda v predvolenom nastavení. Ak je nastavené tento atribút pravdaASP.NET beží správy overovania kontrola (MAC) na zobrazenie stav stránky, stránky sa pri zaúčtovaní späť od klienta. Táto kontrola Určuje, ak stav zobrazenia stránky bol upravený na klientovi. Pre bezpečnostné účely, odporúča sa ponechať si tento atribút nastavený na pravda.

Keď zavoláte Server.transfer metóda a nastavte druhý parameter pravda, môžete zachovať Reťazca dopytu a Formulár zbierky. Jedným z polí formulára je skryté __VIEWSTATE pole formulára, ktoré vlastní štát zobrazenie stránky. Zobrazenie štátnej správy overenie skontrolovať zlyhá, pretože overovanie správ kontrolovať iba kontroly každú stranu. Preto stav zobrazenia zo stránky, ktorú si vyžaduje Server.transfer nie je platná na stránke určenia.

Zobraziť stav je stránka scoped a je platný pre túto stránku iba. Zobrazenie štátu by sa nemali prevedené celej stránky.

RIESENIE

Ak chcete vyriešiť tento problém, použite jednu z nasledujúcich metód.

Rezolúcia 1

Prenos hodnôt medzi stránky prejsť váš server kontrolných hodnôt na iné stránky. Ďalšie informácie nájdete na nasledujúcich MSDN dokumentácia:
Absolvovanie Server kontrolných hodnôt medzi stránky
http://msdn2.Microsoft.com/en-us/library/6c3yckfw (vs.71) .aspx
To si vyžaduje, že vytvárate verejných vlastnosti pre každú vlastnosť kontroly, ktoré chcete prístup z určenia stránku.

Ak máte veľa kontroly, a ak chcete prístup k vlastnosti týchto Ovládacie prvky z inej stránky, môžete tiež deklarovať týchto ovládacích prvkov ako verejné premenné. Napríklad:

Page1.aspx
Public Class Page1
    Public WithEvents TextBox1 As System.Web.UI.WebControls.TextBox

    'Insert your code here.
End Class
				
Page2.aspx
            Dim sourcePage As Page1
            sourcePage = CType(Context.Handler, WebForm1)
            Response.Write(sourcePage.TextBox1.Text)
				

Rezolúcia 2

Nedopadlo druhý parameter, (čo je FALSE v predvolenom nastavení) keď zavoláte Server.transfer. Napríklad:
Server.Transfer("<page name>")
				
Tento kód neposiela Reťazca dopytu a Formulár polia na stránku, ktorá sa nazýva. Keď je prevedené žiadne údaje, ASP.NET nespustí kontrola overovania správ.

DALSIE INFORMACIE

Kroky na reprodukovanie správanie

  1. Vytvoriť .aspx stránku s názvom WebForm1.aspx, ktorý prevádza vykonanie na inú stránku. Do WebForm1.aspx, pridajte nasledujúci kód:
    <%@ Page language="vb" AutoEventWireup="true" %>
    
    <html>  
      <body>	
        <form id="WebForm1" method="post" runat="server">
          <asp:TextBox id="txtName" runat="server">Your Name</asp:TextBox><br>
          <asp:Button id="Button1" runat="server" Text="Submit" OnClick="Button1_Click"></asp:Button>
        </form>	
      </body>
    </html>
    
    <script runat=server>
    Sub Button1_Click(sender As Object, e As System.EventArgs)
    	Server.Transfer("WebForm2.aspx",true)
    End Sub
    
    </script>
    					
  2. Vytvoriť inú .aspx stránku s názvom WebForm2.aspx a potom pridať nasledujúci kód:
    <%@ Page language="vb" AutoEventWireup="true" %>
    
    <html>
      <body>	
        <form id="WebForm2" method="post" runat="server">
          <asp:Label id="lblName" runat="server" >Web Form 2</asp:Label>
        </form>
    	
      </body>
    </html>
    
    <script runat=server>
    Sub Page_Load(sender As Object, e As EventArgs)
    
    Dim thisPage As System.Web.UI.Page
    Dim nameTextBox As TextBox
    
    	thisPage = CType(Context.Handler, System.Web.UI.Page)
    	nameTextBox =  CType(thisPage.FindControl("txtName"), System.Web.UI.Control)
    
    	lblName.Text = "Your name is '" & nameTextBox.Text & "'."	
    	
    End Sub
    
    </script>
    					
  3. Otvorte WebForm1.aspx vo vašom prehliadači a potom kliknite na tlačidlo Predložiť.

Vlastnosti

ID článku: 316920 - Posledná kontrola: 8. novembra 2011 - Revízia: 2.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • Microsoft ASP.NET 1.0
Kľúčové slová: 
kbprb kbstate kbwebforms kbmt KB316920 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:316920
Upozornenie na neaktuálny obsah článku databázy KB
Tento článok obsahuje informácie o produktoch, pre ktoré spoločnosť Microsoft už neposkytuje technickú podporu. Z tohto dôvodu je tento článok publikovaný ako nezmenený a už nebude aktualizovaný.

Odošlite odozvu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com