webForumDet fria alternativet

Hitta kontroll i panel

.NET

10 svar · 413 visningar · startad av erka

Medlem sedan dec. 19996 522 inlägg
Frågan#1

Hej
Jag har på min sida två paneler, pnl1 och pnl2. pnl1 innehåller en del textboxar och när man klickat på en knapp i den döljs pnl1 och pnl2 visas samtidigt som informationen från pnl1's textboxar ska in i en databas. Men jag får inte ut värdet ifrån mina textboxar i pnl1.

I min codebehind har jag som exempel deklarerat följande

protected System.Web.UI.WebControls.TextBox txtBoxFörNamn;

i koden för knapptrycket har jag följande

pnl1.Visible = false;
pnl2.Visible = true;

User tmpUser = new User();
TextBox tmpTextBox;

tmpTextBox = (TextBox)pnl1.FindControl("txtBoxFörNamn");
tmpUser.firstname = tmpTextBox.toString();

Men det finns inget värde i min tmpTextBox, någon som vet vad jag gör för fel eller hur man ska göra för att korrekt hitta ett värde i en textbox som ligger i en panel.

Mvh
Erka

Medlem sedan apr. 2004778 inlägg
#2

Du behöver inte använda FindControl för kontroller som ligger i en Panel. Det är bara att deklarera dom och använda dom som vanligt i code-behind.

Medlem sedan dec. 19996 522 inlägg
#3

Patrik, det var det jag antog också, men det funkar likt förbenat inte heller.

Kör jag denna kod i mitt knapptryck, ger inget värde i tmpUser.firstname (och ja klasses fungerar som den ska, det finns inget värde i txtBoxFörNamn.text)

pnl1.Visible = false;
pnl2.Visible = true;

User tmpUser = new User();
tmpUser.firstname = txtBoxFörNamn.Text.ToString();

och överst i codebehinden har jag deklarerat
protected System.Web.UI.WebControls.TextBox txtBoxFörNamn;

Provar jag att lägga till en label i min pnl2 och där skriva ut värdet från txtBoxFörNamn är det tomt, skriver jag dock ut något annat i min label tex Hej fungerar det.

Mycket märkligt och jag kan inte se vad som är fel.

Red.
Det verkar som om när jag klickar på knappen töms texten i mina textboxar, vad är det jag har tänkt fel någonstanns

Medlem sedan apr. 2004778 inlägg
#4

Ok, då är felet inte i dina boxar och paneler utan i Page_Load. Där har du förmodligen kod som tömmer boxarna. Du måste lägga till ett
[code]
If (!(Page.IsPostBack)) {
}
[/code>
och så lägger du din Page_Load kod innanför den If-satsen. Annars så är boxarna tomma när knappeventen körs.

Medlem sedan dec. 19996 522 inlägg
#5

Tack men det strular fortfarande, så här ser det ut nu.

CodeBehind

protected System.Web.UI.WebControls.Panel pnlStep2;
protected System.Web.UI.WebControls.Panel pnlStep1;
protected System.Web.UI.WebControls.TextBox txtBoxFörNamn;
protected System.Web.UI.WebControls.TextBox txtBoxEfternamn;
protected System.Web.UI.WebControls.TextBox txtBoxEpost;
protected System.Web.UI.WebControls.TextBox txtBoxLösenord;
protected System.Web.UI.WebControls.TextBox txtBoxPresentation;
protected System.Web.UI.WebControls.CheckBox chkBoxAvtal;
protected System.Web.UI.WebControls.TextBox txtBoxGlömtEpost;
protected System.Web.UI.WebControls.LinkButton lnkBtnRegistrer;

private void Page_Load(object sender, System.EventArgs e)
{
	if (!(Page.IsPostBack)) {
		pnlStep1.Visible = true;
		pnlStep2.Visible = false;
	}
		
}

private void lnkBtnRegistrer_Click(object sender, System.EventArgs e)
{			
	
	//Bara för att testa slänger jag in det i en label i pnlStep1
	pnlStep1.Visible = false;
	pnlStep2.Visible = true;
	Label tmpLbl = new Label();
	tmpLbl.Text = txtBoxFörNamn.Text.ToString();			
	pnlStep1.Controls.Add(tmpLbl);
}

ASPX

<form id="Form1" method="post" runat="server">
<asp:Panel id="pnlStep1" runat="server" Visible="False">
<asp:textbox id="txtBoxFörNamn" runat="server" CssClass="Text" Width="150px" MaxLength="50"></asp:textbox>
<asp:textbox id="txtBoxEfternamn" runat="server" CssClass="Text" Width="150px" MaxLength="50"></asp:textbox>
<asp:textbox id="txtBoxEpost" runat="server" CssClass="Text" Width="150px" MaxLength="50"></asp:textbox>
<asp:textbox id="txtBoxLösenord" runat="server" CssClass="Text" Width="150px" MaxLength="15"></asp:textbox>
<asp:textbox id="txtBoxPresentation" runat="server" CssClass="Text" Width="300px" MaxLength="500" TextMode="MultiLine" Rows="10"></asp:textbox>						
<asp:CheckBox id="chkBoxAvtal" runat="server"></asp:CheckBox>
<asp:LinkButton id="lnkBtnRegistrer" runat="server" CssClass="Text">Registrera dig</asp:LinkButton>
</asp:Panel>

<asp:Panel id="pnlStep2" runat="server" Visible="false">Du registrerade dig som användare och kan nu logga in med ditt konto.</asp:Panel>
</form>

Hmmm ser inget fel i denna kod

Medlem sedan apr. 2004778 inlägg
#6

Körs din klick-funktion överhuvudtaget?
Om du lägger in en Response.Write("I funktionen") och klickar på knappen, skriver den ut det då?

Anledningen att jag frågar är att jag inte ser någon eventhandler för knappen. T.ex. OnClick="lnkBtnRegistrer_Click" i taggen.

Medlem sedan dec. 19996 522 inlägg
#7

Jorå den körs eftersom skriver jag den likt detta får jag fram det

private void lnkBtnRegistrer_Click(object sender, System.EventArgs e)
{			
	
	//Bara för att testa slänger jag in det i en label i pnlStep1
	pnlStep1.Visible = false;
	pnlStep2.Visible = true;
	Label tmpLbl = new Label();
	tmpLbl.Text = "Hejsan svejsan";		
	pnlStep1.Controls.Add(tmpLbl);
}
Medlem sedan apr. 2004778 inlägg
#8

Men i exemplet och koden ovan sätter du pnlStep1.Visible = false, ska det inte vara true om det är till pnlStep2 du addar en label?

Medlem sedan dec. 19996 522 inlägg
#9

Oj mitt fel, blev fel i klipp och klistra. Givetvis menade jag
pnlStep2.Controls.Add(tmpLbl);, jag bytte namn på dem när jag klistra in dem här för tydlighetens skull. Men svaret är fortfarande det samma.

/Red
Det är så sjukt märkligt, har gjort så här på flertalet andra sidor och då har det funkat. Gör om sidan från scratch så ska vi se om det fungerar bättre

Medlem sedan dec. 19996 522 inlägg
#10

Nu verkar det fungera, gjorde om allt från början. Mycket märkligt då koden blev exakt det samma, provade och jämföra både aspx och codebehind filen i en texteditor med compare metod.

Följfråga som någon kanske har en bra lösning på.

Det är ju så att om man klickat på knappen i min första panel döljs den och panel2 kommer samt att informationen från panel1 läggs till i databasen. Men om man har klickat på knappen och står vid panel2 så att säga, och man trycker på f5 så körs ju knapptryckningen igen och informationen läggs in i databasen på nytt. Går detta att lösa på något smidigare sätt än att kolla i databasen.

Mvh
Erka

Medlem sedan sep. 20011 914 inlägg
#11

Brukar göra så här.

//.aspx
<asp:button id="btClick" text="Click" runat="server" />

//.aspx.cs
protected Button btClick;
private void Page_Load(object sender, System.EventArgs e)
{
   if(!IsPostBack)
   {
      Session["grr"] = true;
   }
}

private void btClick_Click(object sender, System.EventArgs e)
{
   if((bool)Session["grr"])
   {
      Response.Write("Hej");
      Session["grr"] = false;
   }
}
280 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
148 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)