Avatar billede wired Nybegynder
02. august 2007 - 00:19 Der er 19 kommentarer og
3 løsninger

Textbox huske det indtastede

Jeg har lavet en side med en Textbox og en LinkButton.

Problemet er når jeg har trykket på Linkbutton og gem data'erne fra TextBox'en, forbliver data'erne i Textbox

Resultatet ønskes udskrivet ud på skærmen, men kommer først frem når siden refreshen (F5). Til gengæld sendes indholdes af TextBox'en igen tilbage og data tilføjes igen til siden.

Hvordan kan dette undgås?
Avatar billede kalp Novice
02. august 2007 - 00:34 #1
ja kan du sagtens gøre noget ved.. hvis du havde lidt kode kunne man evt. vise hvordan det skulle rettes.

men f.eks kan du tjekke på post backs..

if(!IsPostBack)
{
// din kode her.
}
Avatar billede neoman Novice
02. august 2007 - 00:37 #2
Det er uklart for mig hvad du ønsker. En textbox er født til at huske ting medmindre du selv slår det fra vha myTextBox.EnableViewState=False

Og resultater fra een postback kan du få frem med det samme ved at manipulere værdierne i Prerender eventet. PÅ det tidspunkt er alle eventhandlers kørt, så man kan skrive en ny værid ind i en textbox, og se den i samme omgang, i stedet for næste postback.
Avatar billede wired Nybegynder
02. august 2007 - 00:49 #3
Jeg har prøvet at skrive TextBox1.EnableViewState = false i Page_Load, men det virker ikke. Teksten er stadig i TextBox'en. Jeg har også prøvet TextBox1.text="". Det får indholdet til at blive slettet, men den bliver stadig indsæt i min XML fil hvis jeg trykker F5 (refresh)

(Prøve lige det med PreRender)

===================
Kode (i grove træk):

Default.aspx
-------------
<asp:TextBox ID="TextBox1" runat="server" />
<asp:LinkButton ID="LinkButton1" runat="server" />
<asp:Label ID="Label1" />

Default.aspx.cs
----------------
void LinkButton1_Click(object sender, EventArgs e)
{
    // Gem LinkButton1.Text i XML-fil
}
protected void Page_Load(object sender, EventArgs e)
{
  // Hent XML-fil og vis indhold i Label1
}
Avatar billede wired Nybegynder
02. august 2007 - 00:54 #4
Har lige prøvet:
----------------
protected override void  OnPreRender(EventArgs e)
{
  base.OnPreRender(e);
  VisXMLFil();
}

Det fik ikke data til at blive udskrevet på siden i samme omgang.
Avatar billede wired Nybegynder
02. august 2007 - 00:55 #5
PS: Anvender forøvrigt MasterPages.
Avatar billede neoman Novice
02. august 2007 - 01:03 #6
Jeg har stadig ingen anelse hvilken logik du prøver at udføre :) Dit eksempel viser ikke hvornår værdierne bliver tilskrevet/hentet i textboxen.

I øvrigt er der ikke noget med at man skal kalde base.osv sidst i en override ?
Avatar billede kalp Novice
02. august 2007 - 01:10 #7
hvis du nu glemmer hvad der står i de der textbokse og laver det tjek på IsPostBack så burde du ikke have det problem længerer.

I sidste ende er det nemt nok, at CLEAR alle controller på siden selv uden ViewStates hjælp..
Avatar billede wired Nybegynder
02. august 2007 - 08:38 #8
neoman>
Der er en lille fejl i mit eksempel - sorry. Der skulle have stået:
void LinkButton1_Click(object sender, EventArgs e)
{
    // Hent TextBox1.Text og gem i XML-fil
}
værdierne i TextBox'ene bliver indtastet af brugeren, og hentet i "LinkButton1_Click"
-

Hele eksempelkoden:
-------------------
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
        <br />
        <div>
            <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>&nbsp;<br />
            <br />
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            <br />
            <br />
            <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">LinkButton</asp:LinkButton></div>
    </form>
</body>
</html>
---------
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void LinkButton1_Click(object sender, EventArgs e)
    {
      Label1.Text += TextBox1.Text;
    }
}

Når der bliver indtaster noget i TextBox1 og trykket på LinkButton1, hoppes der ned i LinkButton1_Click som tilføjer det i Label.

Problemet er at hvis man herefter trykker på refresh (F5), hopper den ned i LinkButton1_Click igen og LinkButton1_Click udføre sin kode igen.
Avatar billede wired Nybegynder
02. august 2007 - 08:59 #9
Det er jeg sørger er at kunne skelne mellem om der er trykket på LinkButton1 el. på F5
Avatar billede wired Nybegynder
02. august 2007 - 09:39 #10
Jeg har opdateret point og udvider med en tillægsspørgsmål.

I min LinkButton1_Click har jeg en dynamisk knap

LinkButton L1 = new LinkButton()
L1.Click += new EventHandler(LinkButton1_Click)

Når den er placeret i LinkButton1_Click virker den ikke, men placeres den i Page_Load virker den (Men den skal være i LinkButton1_Click)

Dvs. to problemer.
Avatar billede kalp Novice
02. august 2007 - 09:51 #11
du kan ikke attache event handleren på din knap i dens eget event!
Avatar billede neoman Novice
02. august 2007 - 09:55 #12
Avatar billede wired Nybegynder
02. august 2007 - 20:47 #13
Ok - jeg er med på at følgende sker:

1) Der kommer postback fra clienten
2) Siden genskabes (hos serveren) Page_load
3) Postback knyttes til siden (hermed sidens event)
4) Event kaldes.
---
Da jeg laver rettelser til det som skal vises på siden, under events, vil det ikke blive vist før næste gang Page_Load bliver udført.

Jeg kan nu gøre følgende:

1) Selv dekode event postback i Page_Load og rette indhold inden siden genskabes.
  (Hermed forsvinder hele fidusen ved event, da det så ikke vil blive anvendt)

2) Under Event rette direkte i det som Page_Load netop har genskabt.
  (virker meget omstændigt, og igen mistes noget af fidusen ved event)

3) Noget helt andet. Men hvad?

Problemet må være meget kendt, men hvad er da normal praksis for at løse problemet.
Avatar billede kalp Novice
02. august 2007 - 20:59 #14
har du prøvet det jeg skrev helt i starten?

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
        {
  // Hent XML-fil og vis indhold i Label1           
        }
}

selv om det lyder som om du skal bruge

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack)
        {
  // Hent XML-fil og vis indhold i Label1           
        }
}



men prøv begge.
Avatar billede wired Nybegynder
02. august 2007 - 21:02 #15
Sorry glemte jeg at fortælle.
Ja det er prøvet. Resultatet bliver at indholdet af XML-filen ikke bliver vist efter at have trykket på LinkButton.
Avatar billede kalp Novice
02. august 2007 - 21:05 #16
okay fint, men det du mangler at fortælle os, som er vigtigst.. det er netop hvor er det du indsætter teksten i din XML fil?? er det på knap trykket?
Avatar billede kalp Novice
02. august 2007 - 21:07 #17
det du kan gøre er følgende..

protected void LinkButton1_Click(object sender, EventArgs e)
{
  if(Session["clicked"] == null){     
    Label1.Text += TextBox1.Text;
// og alt den kode du nu plejer at gøre her.

}else{ Session["clicked"] = "true"; }
}


og et hvert andet sted hvor du ikke ønsker at noget kode skal afvikles på F5 skal du nu bare tilføje

if(Session["clicked"] == null){

}

rundt om.
Avatar billede neoman Novice
02. august 2007 - 21:07 #18
Det er svært at gætte ud fra de oplysninger der foreligger - copy/paste noget kode, så er det ret meget nemmere at forholde sig til.
Avatar billede wired Nybegynder
03. august 2007 - 13:11 #19
Mange tak for løsningsforslagene. De viste sig ikke direkte at løse mit problem. Måske fordi jeg ikke formuleret det klart nok og kom med for dårlige eksempler.
Jeg har derfor valgt at lave et nyt spørgsmål med max point, hvor jeg håber at have klarlagt problemet mere tydeligt.

Jeg vil dog gerne give nogle points for jeres indsats ind til videre som tak for hjælpen. Send derfor gerne et svar begge to.

Jeg henviser derefter til http://www.eksperten.dk/spm/790142
Avatar billede wired Nybegynder
03. august 2007 - 13:12 #20
Til deling
Avatar billede neoman Novice
03. august 2007 - 13:15 #21
ok - svar
Avatar billede kalp Novice
03. august 2007 - 13:27 #22
:)
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