PRB: ASP.NET je události Change i Pokud změníte hodnotu ovládacího prvku

Překlady článku Překlady článku
ID článku: 314809 - 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

Za určitých okolností ASP.NET je změnit události ASP.NET Web řídit, i když změníte ovládací prvek.

Příčina

Některé ovládací prvky, jako je například událost SelectedIndexChanged v ovládacím prvku DropDownList nebo událost TextChanged v ovládací prvky TextBox spoléhají na registraci události Change použít stav zobrazení. Tento problém se setkáte při vytvoření tyto ovládací prvky dynamicky po události připojený.

Při ASP.NET vykreslí stránku v prohlížeči, nemají ovládací prvky vytvořené dynamicky přidružené události Change. Protože je k dispozici žádná událost, ASP.NET neuloží stav zobrazení. Toto se nazývá zobrazení stav optimalizace.

Při zaúčtování zpět na stránku a události jsou připojený, ASP.NET očekává stav zobrazení, ale nalezne žádný neexistuje. Tento rozdíl je události Change, i když změní ovládacího prvku.

Řešení

Ujistěte se před ASP.NET vykreslí stránka zapojení události Change dynamicky vytvořených ovládacích prvků. Tím zajistíte, že stav zobrazení ovládacího prvku existuje.

Prohlášení

Toto chování je záměrné.

Další informace

Kroky pro reprodukci tohoto chování

Vytvořit webový formulář

  1. Vytvoření nové aplikace ASP.NET jazyka s názvem ChangeFired.
  2. Otevřete formulář WebForm1 v režimu návrháře. Přetáhněte ovládací prvek DataList, ovládacího prvku tlačítko a DataSet ovládací prvek do formuláře.
  3. V dialogovém okně Přidat DataSet klepněte netypovou datové sady a potom klepněte na tlačítko OK. Zachovat výchozí názvy pro všechny ovládací prvky.
  4. Upravit kolekci tabulky DataSet1. Přidat novou tabulku s názvem Tabulka1.
  5. Upravit kolekci Columns Tabulka1. Přidat nový sloupec s názvem Sloupec1.
  6. DataList1 klepněte a potom změnit vlastnosti DataSourceDataSet1.
  7. Klepněte pravým tlačítkem myši DataList1, přejděte na příkaz Upravit šablona a klepněte na Položku šablony. Přetáhněte ovládací prvek DropDownList části ItemTemplate.
  8. DropDownList1 klepněte a potom přidejte pět položek kolekci Items. Nastavte text a hodnoty vlastností těchto položek na jeden, dva, tři, čtyři a pět.
  9. Vlastnost AutoPostBack nastavit na hodnotu true pro DropDownList1.
  10. Upravit vlastnosti DataBinding kolekce pro DropDownList1. Přidat následující výraz vazby vlastní vlastnost SelectedIndex:
    DataBinder.Eval(Container, "DataItem.Column1")
    					
  11. Přepněte do zobrazení HTML. Nastavte atribut trasovánítrue v direktivě @ Page následujícím způsobem:
    <%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" 
    Inherits="ChangeFired.WebForm1" trace="true" %>
    					

Přidat soubor kódem na pozadí

  1. Klepněte pravým tlačítkem myši WebForm1.aspx a potom klepněte na tlačítko Zobrazit kód.
  2. Přidejte následující kód události Page_Load:
    DataSet1.Tables(0).Rows.Add(New Object() {"1"})
    DataSet1.Tables(0).Rows.Add(New Object() {"2"})
    DataSet1.Tables(0).Rows.Add(New Object() {"3"})
    DataSet1.Tables(0).Rows.Add(New Object() {"4"})
    
    If Not IsPostBack Then
      DataBind()
    End If
    
    Dim objItem As DataListItem
    For Each objItem In DataList1.Items
      AddHandler CType(objItem.FindControl("DropDownList1"), _
      DropDownList).SelectedIndexChanged, AddressOf DropDownList1_SelectedIndexChanged
      If Not objItem.FindControl("DropDownList1") Is Nothing Then
        Trace.Write("Added SelectedIndexChanged Handler")
      End If
    Next
    					
  3. Vytvořit nové procedury Sub pod události Page_Load způsobem zpracovat událost SelectedIndexChanged:
    Private Sub DropDownList1_SelectedIndexChanged(ByVal sender As System.Object, _
    ByVal e As System.EventArgs)
      DataBind()
      Trace.Write("SelectedIndexChanged, DataBind()")
    
      'Uncomment the following code to resolve this problem.
      'Dim objItem As DataListItem
      'For Each objItem In DataList1.Items
      '  AddHandler CType(objItem.FindControl("DropDownList1"), _
      '  DropDownList).SelectedIndexChanged, AddressOf DropDownList1_SelectedIndexChanged
      'Next
    End Sub
    					

Spuštění ukázky

  1. Spustit stránku. Všimněte si dynamicky vytvořených ovládacích prvků DropDownList obsahovat stav zobrazení v trasovací informace řízení stromu.

    K tomu dochází, protože volání metody DataBind dynamicky vytvoří DropDownList ovládací prvky a zavěšení nahoru obslužné rutiny události po DataBind volání v události Page_Load. Protože ovládací prvky mají obslužnou rutinu události zobrazit stav optimalizace nekoná.
  2. Klepněte na tlačítko na stránce. Všimněte si, že dojde k zaúčtování zpět a spustí kód v rámci události Page_Load. Stav zobrazení existuje pro ovládací prvky DropDownList, protože ovládací prvek přidružen obslužnou rutinu události.
  3. Změňte hodnotu v DropDownList ovládací prvky. Všimněte si, že dojde k zaúčtování zpět. Kromě toho Všimněte si, že ASP.NET je událost Page_Load a spustí události DropDownList1_SelectedIndexChanged.
  4. V události DropDownList1_SelectedIndexChanged volat metodu DataBind znovu k vytvoření nové ovládací prvky DropDownList.

    Protože událost SelectedIndexChanged není připojený na tyto nové prvky DropDownList, ASP.NET používá optimalizace zobrazit stav a neukládá stavu zobrazení pro nové ovládací prvky DropDownList.
  5. Zkontrolujte informace o trasování pro řízení stromu. Všimněte si, že ovládací prvky DropDownList nemají stav zobrazení.
  6. Klepněte na tlačítko na stránce. Všimněte si, že dojde k zaúčtování zpět a Všimněte si ASP.NET spustí událost Page_Load. Protože zachytávat událost SelectedIndexChangedDropDownList ovládací prvky ASP.NET očekává stav zobrazení má být přidružena ovládací prvky.

    Však protože stav zobrazení neexistuje, ASP.NET je událost SelectedIndexChanged, i když vyberete položku.

ŘEŠENÍ

Chcete-li tento problém vyřešit, vložte kód v události DropDownList1_SelectedIndexChanged tak, aby zapojení obslužné rutiny událostí s nově vytvořených ovládacích prvků.

Vlastnosti

ID článku: 314809 - Poslední aktualizace: 3. května 2004 - Revize: 2.7
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
Klíčová slova: 
kbmt kbdatabinding kbevent kbprb kbservercontrols kbstate kbwebforms KB314809 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:314809

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