PRB: „ stav zobrazení je neplatná"používání server.Transfer se zobrazí chybová zpráva

Překlady článku Překlady článku
ID článku: 316920 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

Při použití HttpServerUtility.Transfer ("page name", true), zobrazí se následující chybová zpráva:
Stav zobrazení je neplatný pro tuto stránku a může být poškozen

Příčina

K tomuto problému dochází, protože atribut EnableViewStateMac<pages> prvek ve výchozím nastavení nastavena na hodnotu true. Tento atribut je nastavena na hodnotu true, ASP.NET spustí zaškrtnutí ověřování zpráv (MAC) na stavu zobrazení stránky, při zaúčtování stránky z klienta. Toto políčko určuje, pokud v klientském počítači byl změněn stav zobrazení stránky. Pro účely zabezpečení je doporučeno ponechat tento atribut nastaven na hodnotu true.

Při volání metody Server.Transfer a druhý parametr na hodnotu true, zachovat kolekce Form a QueryString. Jedno z polí formuláře je __VIEWSTATE skryté pole formuláře, který plní stavu zobrazení pro stránku. Ověřování zpráv stavu zobrazení zkontrolovat nezdaří, protože zpráva ověřování zaškrtnutí pouze zkontroluje každé stránky. Stav zobrazení ze stránky, která volá Server.Transfer proto není platný na cílové stránce.

Stav zobrazení je rozsahem stránky a je platný pouze dané stránky. Stav zobrazení by měly být převedeny stránkách.

Řešení

Chcete-li tento problém vyřešit, použijte jednu z následujících metod.

Řešení 1

Převod hodnot mezi stránkami serveru řízení hodnoty předat jiné stránky. Další informace naleznete následujícím MSDN dokumentace:
Hodnoty řízení serveru předávání mezi stránky
http://msdn2.microsoft.com/en-us/library/6c3yckfw(vs.71).aspx
To vyžaduje vytvoření veřejné vlastnosti pro každou vlastnost ovládacího prvku, který chcete získat přístup z cílové stránky.

Pokud máte mnoho ovládacích prvků a chcete získat přístup k vlastnosti tyto ovládací prvky z jiné stránky, můžete také jako veřejné proměnné deklarovat tyto ovládací prvky. Napří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)
				

Řešení 2

Nepředá druhý parametr (což je false ve výchozím nastavení) při volání Server.Transfer. Například:
Server.Transfer("<page name>")
				
tento kód neodesílá polí Form a QueryString stránku, která se nazývá. Při převodu žádná data ASP.NET nespustí zaškrtnutí ověřování zprávy.

Další informace

Kroky pro reprodukci tohoto chování

  1. Vytvořte stránku ASPX s názvem WebForm1.aspx přenese provádění na jinou stránku. Přidejte následující kód WebForm1.aspx:
    <%@ 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. Vytvořit jinou stránku ASPX s názvem WebForm2.aspx a přidejte následující 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. Otevřít WebForm1.aspx v prohlížeči a klepněte na tlačítko Odeslat.

Vlastnosti

ID článku: 316920 - Poslední aktualizace: 19. dubna 2007 - Revize: 3.2
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft ASP.NET 1.0
Klíčová slova: 
kbmt kbprb kbstate kbwebforms KB316920 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:316920
Právní omezení pro obsah znalostní báze týkající se produktů, jejichž podpora byla ukončena
Tento článek byl napsán o produktech, pro které společnost Microsoft již neposkytuje nadále podporu. Článek je tedy nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.

Dejte nám zpětnou vazbu

 

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