Avatar billede jacob_top Nybegynder
15. november 2004 - 15:51 Der er 10 kommentarer og
1 løsning

Læsning af data indtastet i forms

Hej Alle!

Jeg har et problem!

Jeg har nogen variable som bliver læst fra en database og lagt ind i et objekt. Disse variable skal præsenteres for brugeren således at han kan gennemlæse disse og evt. rette i det der er forkert.

Strengene bliver læst ind i de forskellige tekstbokse på følgende måde:

(lille eksempel)
protected System.Web.UI.WebControls.TextBox email;

private void Page_Load(object sender, System.EventArgs e)
{
  etObjekt = (Objekt)Session[Request.QueryString["sessionId"]];
  email.Text = etObjekt.Email; //Property
}

Når så brugeren klikker på knappen "gem" sker der følgende og lad os forestille os at brugeren har ændret email-adressen:

private void gem_Click(object sender, System.EventArgs e)
{
  etObjekt.Email = email.Text;
}

Her opstår mit problem så..... emailen bliver tilsyneladende ikke ændret i objektet! Eller rettere teksten fra tekstboksen bliver ikke hentet ind i koden?

Hjælp!

Mvh
Jacob
Avatar billede ha9953 Nybegynder
15. november 2004 - 15:55 #1
Ser ud til at du skal have en if Not page.ispostback (i vb) ind på siden. I denen skal du hente dine data. Hvis ikke bliver dataene hentet ind igen når du klikker på gem
Avatar billede jacob_top Nybegynder
15. november 2004 - 16:46 #2
Nope, hvis jeg indfører if(!Page.isPostback) får jeg en nullpointerexception når jeg prøver at hente teksten fra tekstboksen med:

etObjekt.Email = email.Text;

Så siger den at email.Text er null?!?
Avatar billede snepnet Nybegynder
15. november 2004 - 18:43 #3
hej jacob :o)
hvordan sætter du tekstboksen ind på siden ?
mvh
Avatar billede jacob_top Nybegynder
15. november 2004 - 19:47 #4
Ok, her kommer et meget forsimplet eksempel:

Min aspx side ser sådan her ud:

<form id="WebForm2" method="post" runat="server">
<TABLE id="Table1" width="300" border="1">
<TR>
  <TD>Adresse</TD>
  <TD><asp:textbox id="adresses" runat="server"></asp:textbox></TD>
</TR>
</table>
<asp:LinkButton id="gem" runat="server">gem</asp:LinkButton>
</form>

Min "codebehindfil" ser således ud:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace test
{

protected System.Web.UI.WebControls.LinkButton gem;
protected System.Web.UI.HtmlControls.TextBox adresses;
private Temp enTest;

private void Page_Load(object sender, System.EventArgs e)
{
  if(!Page.IsPostBack)
  {
    //Her henter jeg objektet fra sessionen og ligger adressen ind i
        //textboxen "adresses", hvis det er første gang siden loades.
        enTest = (Temp)Session[Request.QueryString["sessionId"]];
    adresses.Text = enTest.adresse;
  }
}

private void LinkButton1_Click(object sender, System.EventArgs e)
{
    //Her er det så meningen at adressen i objektet enTest, skal opdateres hvis
    //der bliver indtastet en ny adresse. Herefter skulle den ny adresse gerne
    //blive vist i textboxen, men alt hvad jeg får er en nullreference exception
    enTest.adresse = adresses.Text;
}
}
Avatar billede jacob_top Nybegynder
15. november 2004 - 19:50 #5
Oops....

protected System.Web.UI.HtmlControls.TextBox adresses;

skulle være:

protected System.Web.UI.WebControls.TextBox adresses;

Men problemstillingen er altså at jeg ikke kan opdatere adressen i objektet.
Den kan simpelthen ikke få fat i den nye tekst, der er indtastet i textboxen.
Hvorfor?!?
Avatar billede snepnet Nybegynder
15. november 2004 - 20:19 #6
hej igen :o)

din null-exception kommer i det eksempel du har sendt kommer nok ikke fra din text-box, men fra enTest.
den initialiserer du første gang brugeren kommer ind på siden, men når der klikkes på knappen, gør du det ikke - og den vil derfor være null når eventhandleren køres.

mvh
Avatar billede jacob_top Nybegynder
15. november 2004 - 21:41 #7
Aha, du har delvist ret.

Når adressen i enTest objektet er opdateret, skal enTest ligges ind i sessionen igen og desuden skal det hentes uden for if(!isPostBack).
Underligt, jeg mente ellers at hvis man bare hentede referencen til etObjekt'et fra sessionen, ændrede man på selve dette objektes værdier, men det gør man åbenbart ikke?

Nå, men du virker lortet sq så langt ;-)

Tak for hjælpen.....igen igen ;-)

Kom med et svar og der gives points.
Avatar billede snepnet Nybegynder
15. november 2004 - 22:43 #8
du kan sagtens sørge for at det der det samme objekt du arbejder på... det kan være praktisk med en property til den slags - f.eks.:

protected Temp enTest
{
  get{return (Temp)Session["sessionnavn"];}
  set{Session["sessionnavn"] = value;}
}

// og så det samme i din page_load
private void Page_Load(object sender, System.EventArgs e)
{
  if(!Page.IsPostBack)
  {
    enTest = (Temp)Session[Request.QueryString["sessionId"]];
    adresses.Text = enTest.adresse;
  }
}

// og i din handler :
private void LinkButton1_Click(object sender, System.EventArgs e)
{
    enTest.adresse = adresses.Text;
}

Det burde virke fint.

mvh
Avatar billede snepnet Nybegynder
02. december 2004 - 18:49 #9
hej jacob - spiller det som det skal ?
mvh
Avatar billede jacob_top Nybegynder
02. december 2004 - 18:51 #10
Ja - spiller (sådan nogenlunde) :)
Avatar billede snepnet Nybegynder
02. december 2004 - 19:16 #11
hehe... det er bedre end at det er gået totalt i kage ;o)
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