Avatar billede dl Nybegynder
24. september 2008 - 10:16 Der er 5 kommentarer og
1 løsning

Få productID sendt til usercontrol via listview

Jeg har en usercontrol med en knap et onclick event på denne knap.
Og en public prop, som er til mit productGuid.

Mening er, at når jeg trykker på denne knap, så bliver mit onclick event avtiveret, og henter productGuid fra prop og kalder ned i mit logic lag. Problemmet er, at når jeg kommer ind i mit onclick event så er productGuid null. Selvom det ren faktisk bliver sat, i starten.


Jeg har også en side, hvor denne usercontrol er på, denne control ligger inde i et listview som får en datasource, og herefter køre derud ad. Alle mine produkter bliver genereret og usercontroller får via prop sat productguid. Jeg kan se at kom kommer derind og bliver sat på genererings tidspunktet. Men så går det også ned ad bakke.

Hvordan kan jeg løse dette lille problem ?

Jeg skal have gemt nogle information i usercontrollen til min events.
Avatar billede crazysnap Seniormester
25. september 2008 - 08:44 #1
Hvor gemmer din property dit Guid? Er det i en member variabel i din UserControl? For alle member variable nulstilles ved postback (altså når onclick event'et udføres) og det kunne forklare hvorfor dit Guid var null når du skal hente det fra din onclick eventhandler.

En løsning kunne være at have en hiddenfield på dine usercontrols der bruges til at gemme Guid id'et i, i stedet for at bruge member variable. Altså have følgende i html delen af din usercontrol:

<asp:HiddenField ID="hiddenGuid" runat="server" />

Og ændre din property til at gemme Guid'et i hiddenGuid, altså:

public string ProductGuid
{
    get { return hiddenGuid.Value; }
    set { hiddenGuid.Value = value; }
}


Håber dette kan løse dit problem.

Mvh.
CS
Avatar billede dl Nybegynder
25. september 2008 - 11:09 #2
Jeg fik selv løst det, ved at bruge knappen jeg havde på siden.
På denne knap, brugte jeg  commandName / commandArgument, på samme måde som du bruger hiddenGuid. Så lage jeg det bare directe på knappen.

Så hvis du kan svar mig på. Hvad mening så er med at kunne lave prop til usercontrol, hvis dens værdier forsvinder ved postback ?
og hvorfor det kun kan være en form på en asp side ?

kan du svare mig på det, du lyder som en der har styr på det. :)
Og bare kom med et svar også, det er min fejl at jeg ikke har fået lukket sp.
Avatar billede crazysnap Seniormester
25. september 2008 - 11:55 #3
Godt at høre du selv fik løst problemet ved at gemme Guid'et i en button-attribute. Jeg kunne dog godt argumentere for at gemme id'et i en HiddenField er en pænere løsning, men det er jo en smags-sag. :)

1)
Dit første spørgsmål går mere på, hvorfor lave member-variable hvis de bliver nulstillet ved hvert postback. Svaret er simpelt, måske har du brug for at gemme nogle variable som deles mellem flere metoder i et enkelt postback eller måske assigner du en member variabel i din OnLoad metode så den initialiseres ved hvert postback og derfor er synlig for alle metoder i din UserControl/Web-Form.

2)
Ja der kan netop kun være en form-tag med runat="server" specificeret på en asp.net side. Du kan godt have flere form-tags på samme side hvis kun en af dem har runat="server" eller hvis alle har runat="server" men kun én er synlig (visible="true").
Jeg kender faktisk ikke svaret på hvorfor asp.net ikke understøtter nested-forms, men du skulle kun have brug for én server form-tag på siden alligevel. Jeg kan ikke lige komme på et scenarie hvor én server form-tag ikke er tilstrækkelig.

Behold du bare pointene selv. :)

Mvh.
CS
Avatar billede dl Nybegynder
25. september 2008 - 14:38 #4
Jeg kunne godt tænke mig at høre dine argumenter for at have det i et hidden field, og ikke bruge den knap's command argument, eftersom det er den løsning jeg kan finde på msdn. Det er vigtig for mig at høre anders argumenter også, det er jo sådan men rygger sig.

Hvis jeg kun kan have et runat server på en form,  hvordan løser jeg så problem sillingen med at have:
  et søge felt på master siden ( menu til højre) til at søge produkter med
  og på content siden, har jeg måske en combobox eller textbox til at søge specifik kunder med

Altså to knapper som skal gøre noget forskelligt, og den default funtionalitet med at trykke på enter på en tekst box, så skal den finde den rigtig sumbit knap som høre til den pågælende action.

Kom med det svar, eftersom jeg begyder at skal have svar på alt imellem himmel og jord, selvom vi dog nok må holde os lidt til indlægget.

// dennis
Avatar billede crazysnap Seniormester
25. september 2008 - 15:19 #5
Hvad HiddenFields angår ville jeg bruge dem til at gemme UserControl specifikke oplysninger så en code-reviewer (en anden programmør) kan se værdierne bliver gemt korrekt og vil være der og kan bruges ved næste postback. Tilgengæld, har du kun én værdi som skal gemmes og den bliver bundet (data bound) i html-koden via en listview f.eks, er det fint nok at gemme værdien i knappens commandArgument (hvilket jeg vil opfordre dig til), forudsat værdien kun skal bruges ved knappens postback event. Skal du bruge værdien i andre metoder også, ville jeg som sagt gemme den i en HiddenField.

Til at løse din "form" problemstilling skal du bare bruge et asp:Panel til at omslutte din ene søge-funktionalitet. Et panel har nemlig en DefaultButton attribute der definerer hvilken submit knap der skal bruges når brugeren trykker "enter". Se eksemplet nedenfor:

<form id="mainForm" runat="server" DefaultButton="btnFibo">
    <asp:TextBox ID="tbFibo" runat="server"> </asp:TextBox>
    <asp:Button ID="btnFibo" runat="server" />


    <asp:Panel ID="pnlGoogle" runat="server" DefaultButton="btnSearch">
        <asp:TextBox ID="tbSearch" runat="server"> </asp:TextBox>
        <asp:Button ID="btnSearch" runat="server" />
    </asp:Panel>
</form>

Og så kommer der et svar alligevel. :)

Mvh.
CS
Avatar billede dl Nybegynder
25. september 2008 - 20:12 #6
DefaultButton="btnFibo"  den havde jeg godt luret efter lidt søgning på nettet  :)

Jeg siger tak, og lukker sp.

// dl
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester