CreateUserWizard   otázka

VB.NET, ASP.NET WebForms

Dobrý den,

rád bych požádal o pomoc s následujícím problémem:

Mám vytvořený formulář pro přidání nových zákazníků pomocí CreateUserWizard.

V prvním kroku (WizardStep) mám mimo jiné textová pole pro zadání korespondenční a dodací adresy a zaškrtávací políčko při jehož zaškrtnutí se spustí níže uvedená událost

    Protected Sub CheckBox1_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs)
        If CheckBox1.Checked = True Then
            DeliveryStreetBox.Text = AdressStreetBox.Text
            DeliveryNumberBox.Text = AdressNumberBox.Text
            DeliveryCityBox.Text = AdressCityBox.Text
            DeliveryZipCodeBox.Text = AdressZipCodeBox.Text
            TimeFromBox.Focus()
        Else
            DeliveryStreetBox.Text = ""
            DeliveryNumberBox.Text = ""
            DeliveryCityBox.Text = ""
            DeliveryZipCodeBox.Text = ""
        End If
        
    End Sub

a hodnoty polí doručovací adresy se naplní hodnotami z adresy korespondenční.

Dále mám v tomto kroku pole nazvané GeneralEmailBox kam je zadána emailová adresa.

V druhém kroku (CreateUserWizardStep) jsem chtěl naplnit hodnotu textového pole Email již zadanou hodnotou z předchozího kroku GeneralEmailBox následující událostí

    Protected Sub StartNextButton_Click(ByVal sender As Object, ByVal e As System.EventArgs)

    GeneralEmailBox.Text = Email.Text    

    End Sub

ale dostávám chybové hlášení, že název Email nebyl deklarován.

Prosím o pomoc a předem děkuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Problém je v tom, že ve stránce jsou pouze komponenty z aktuálního WizardStepu, ostatní ne. Jak z toho ven si nejsem přesně jistý, nemám to na čem odzkoušet. O víkendu se na to zkusím podívat, kdyžtak se připomeňte mailem.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nebylo by možné vložit do vlastnosti Text prvku Email nějaký kód, který by vytáhl vlastnost Text prvku umístěného v předchozím kroku třeba z wiewstate.

Mám namysli nějakou metodu jako je tomu při načítání z databáze:

Text='<%# Bind("Sloupec")%>'

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak jsem se na to podíval a našel řešení, je to celkem snadné. Přidáte si do wizardu vlastní step (doporučuji TemplateWizardStep, ať se nemusíte patlat s tlačítky Next atd.) a do něj dané komponenty, např.:

    <asp:CreateUserWizard ID="CreateUserWizard1" runat="server" OnCreatedUser="CreateUserWizard1_CreatedUser">
        <WizardSteps>
            <asp:TemplatedWizardStep ID="MyStep" runat="server">
                <ContentTemplate>
                    Jméno a příjmení:
                    <asp:TextBox ID="FullName" runat="server"></asp:TextBox>
                </ContentTemplate>
            </asp:TemplatedWizardStep>
            <asp:CreateUserWizardStep ID="CreateUserWizardStep1" runat="server">
            </asp:CreateUserWizardStep>
            <asp:CompleteWizardStep ID="CompleteWizardStep1" runat="server">
            </asp:CompleteWizardStep>
        </WizardSteps>
    </asp:CreateUserWizard>

V události CreatedUser, tedy po vytvoření uživatele, pak hodnotu z komponenty zjistíte takto:

CType(MyStep.ContentTemplateContainer.FindControl("FullName"), TextBox).Text

MyStep je ID stepu, ve kterém leží daná komponenta.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zřejmě to nechápu, nebo jsem špatně popsal o co se mi přesně jedná.

Já mám vytvořený ve wizardu vlastní WizardStep s ID="WizardStep1" a v něm krom jiného komponentu TextBox s ID="GeneralEmailBox" (tak jak to popisujete ve vašem řešení).

Dále mám jako další krok CreateUserWizardStep s ID="CreateUserWizardStep1" a v něm komponentu TextBox s ID="Email", která se automaticky vytvoří průvodcem a není ji možné s ní manipulovat (odstranit,přesunout do vlastního WizardStepu).

Já potřebuji aby uživatel zadal emailovou adresu kterou průvodce požaduje při registraci již v prvním kroku a tak jsem to chtěl obejít tak, že jsem v prvním kroku (WizardStep)vytvořil vstupní pole pro zadaní (TextBox ID="GeneralEmailBox") a po vyplnění a přechodu na další krok (CreateUserWizard ve kterém je TextBox ID="Email") by bylo textové pole pro zadání emailové adresy (TextBox ID="Email") již naplněno hodnotou pole (TextBox ID="GeneralEmailBox" z WizardStepu).

Problém je v tom, že se mi nedaří komponentě TextBox s ID="Email" přiřadit vlastnost TextBox.Text, protože se komponenta nachází až v kroku CreateUserWizard a nelze použít toto:

Email.Text = GeneralEmaiBox.Text
nahlásit spamnahlásit spam 0 odpovědětodpovědět

Kdybyste se podíval na moji odpověď, tak tam větší část řešení najdete. K vlastní komponentě prostě nemůžete přistupovat přes GeneralEmailBox.Text, ale přes to CType(MyStep.ContentTemplateContainer.FindControl("GeneralEmailBox"), TextBox).Text. A jak tuto hodnotu dostat do pole pro e-mailovou adresu? Třeba nastavit komponentě CreateUserWizard vlastnost Email na hodnotu, která je tam zadaná.

Samozřejmě je třeba nastavit ji ve správnou chvíli, vhodná událost je třeba ActiveStepChanged, která se vyvolá při přechodu z jednoho kroku na druhý. Stačí porovnat index aktuálního a předchozího kroku a je to.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback