18. november 2004 - 19:51Der er
17 kommentarer og 1 løsning
Opdater værdi i usercontrol efter redigering af objekt i anden
Jeg har en side, som består af flere usercontrols. Den ene usercontrol er en login-form, som når man er logget ind vil kunne se bestemt info, der er tilknyttet ens profil.
I en main-usercontrol har jeg så en form, hvor det er muligt at redigere ens profil-info. Men når man retter i denne, skal værdierne i login-usercontrolen også opdateres. Men så vidt jeg kan se, laves der kun postback på den usercontrol, man arbejder med.
Hvordan får jeg lavet postback på login usercontrolen, når der fx trykkes på en knap i main-usercontrolen? Eller er der et andet alternativ?
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
Hvad mener du med at der kun laves postback i den ene ? - det hele bliver postet til serveren uanset hvad du eksekverer et postback med.
Er der noget kode du har implementeret i en eller anden handler som du ikke får eksekveret som forventet ? (Så kan eventuelt lige smide koden herud så vi kan tage en kigger).
Nu ved jeg ikke hvordan du fylder dataen i controllerne i loginusercontrollen, men mit gæt er at du ikke fylder dem direkte fra databasen ved page_load.
Hvis du gør det så vil de nemlig til enhver tid repræsentere det nyeste indhold fra databasen. Og da de nemlig ikke gør det i dette tilfælde så har du lavet det på en anden måde.
Nu kan jeg se ændringerne, så snart jeg skifter til en anden side, end den side med formen, som skal udløse, at ændringerne sker. Men jeg kan kun se ændringerne i min login-usercontrol, når jeg skifter væk fra denne side. Ændringerne bliver altså ikke opdateret, når der trykkes på min "update" knap. Hvorfor? :)
userLabel.Text = "Du er logget ind som "+Session["sessionUsername"].ToString()+""; passLabel.Text = "Handicap: "+player_hcp[0]+ "<br>" + "Antal runder: "+player_rounds[0]+"";
} } }
Det eneste som sker i koden, jeg eksekverer i formen er, at profilen bliver opdateret i databasen med nye værdier. Én af de nye værdier er "handicap", som altså er gemt rigtigt i databasen efter update, men ikke bliver vist i ovenstående usercontrol.
i den kode du har sendt, opdateres der ikke noget i forbindelse med et postback (så ændringerne vil du ikke kunne se før du forlader siden, og går ind på den igen).... du må enten hente (og vise) værdierne hvergang - eller også skal du have en mekanisme der sikrer kontrollen opdateres fra basen når det er nødvendigt. mvh
jaffafo, nej jeg opdaterer ikke session, men derimod player_hcp[0], som er forbundet med sessionvariablen.
snepnet, koden giver samme resultat, hvis jeg fjerner if(!IsPostBack) betingelsen. Og det er vel sådan jeg havde forestillet mig at hente og vise værdierne hver gang, men det virker ikke.
Ved du, hvordan jeg får det til at virke, eller hvordan jeg får opdateret denne control?
// i page_load if(!IsPostBack) >>kald til databindingsmetode
og i handlere hvor der laves ændringer i datagrundlaget, afslutter du med >>kald til databindingsmetode
og du har så en databindingsmetode >>hent data >>påtryk data hvor det skal påtrykkes.
du får svært ved at gøre det på en anden måde uden at løbe ind i diverse problemer af den ene eller anden art, så jeg vil foreslå at du prøver at bygge det op sådan.
jeg forstår ikke helt hvad du skriver med at det var sådan du havde tænkt dig at hente og vise værdierne hver gang... altså det du skriver i forbindelse med IsPostBack. IsPostBack vil være false når brugeren kommer ind på siden - og true efterfølgende med mindre du laver et redirect - så hvordan hænger det sammen med at hente og vise værdierne hver gang ?
men bortset fra det.... f.eks. denne : userLabel.Text = "Du er logget ind som "+Session["sessionUsername"].ToString()+"";
er et eksempel på hvad du skal ske i forbindelse med databinding, og hvis du sætter session-variablen i en eventhandler på din form, vil det give det du beskriver. eventhandleren på formen vil altid eksekvere efter page_load på din kontrol.
hvis du har brug for - fra din form - at opdatere din kontrol, kan du sørge for at lave dig en public medtode (Refresh()), der sørger for at gøre det nødvendige omkring opdatering. metoden kan du så kalde fra en eventhandler på din form.
Jeg tror ikke helt jeg er med. Jeg har nok ikke forklaret mig godt nok. Nu er min eksamen godtnok vel overstået, så jeg vil smide eksemplet ud til dig:
Her kan du logge ind med brugernavn ss og password ss. Du vil nu se, at handicappet er registreret til 11,7. Går du ind i "Min profil" og retter handicappet til fx 11,8, vil det først bliver opdateret i "Brugeroplysninger", når der skiftes side - og altså ikke allerede ved tryk på "Opdater" knappen.
Hvordan fixer jeg dette? Jeg blev vist tabt i din sidste kommentar :-/
Hvis der stadig bliver abonneret på dette spørgsmål er det stadig åbent :) Hvis I klikker jer ind på ovenstående side og logger ind og derefter ændrer handicap i "Min profil", så vil I se, at profilen bliver opdateret, men usercontrolen med login-information opdaterer ikke handicap værdien før der bliver lavet postback én gang til. Dvs at det, som sørger for at opdatere handicap-værdien ikke ligger i
if (!IsPostBack)
men så burde den jo opdatere værdien lige efter, at der er trykket på "opdater" og ikke ved det efterfølgende postback. Hvordan kan det være?
det er vel stadig bare et spørgsmål om at du ikke opdaterer din menuoplysninger med de nye tal der er gemt.
jeg vil tro at dit scenarie er, at du f.eks. i page_load sørger for at hente de oplysninger du skal bruge for at vise handikappet i menuen. når page_load er kørt på den form hvor menuen sidder, vil page_load køre i din kontrol, og derefter vil eventhandleren for klikeventet på knappen køre, hvilket gør at oplysnigerne opdateres i din kontrol. men ... på det tidspunkt er menuen sikkert bygget op, og vil derfor vise gamle oplysninger.
den meste hensigtsmæssige måde at fikse det på er, at du sørger for at din kontrol kan fortælle dig at den er opdateret, og det event samler du så op på din form. når eventet fyres, sørger du så bare for at optatere værdien i menuen.
roger ... du skriver bare hvis der er noget. hvis du har en messenger-konto, er du også velkommen til at smide den her, så skal jeg nok tilføje dig... så kan det gå lidt hurtigere :o) mvh
Hehe, jeg er kommet væk fra projektet i mellemtiden :)
Ellers ville man jo kunne lave noget i retning af parent.Submit() eller noget i den stil... du skal ihvertfald have dine points ;)
Synes godt om
Ny brugerNybegynder
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.