webForumDet fria alternativet

UserControl som automagiskt hämtar db id?

.NET

14 svar · 470 visningar · startad av Travoni

Medlem sedan okt. 20041 556 inlägg
Frågan#1

Jag registrerar en usercontrol på sidan som vanligt och varje gång jag "lägger in den" på sidan så vill jag att controllen skall hämta en viss post ifrån en databas.

Ex.

<@ Register bla @>

1. <uc:bla runat="server" />
...

2. <uc:bla runat="server" />

Och ifrån codefilen så anropas ett speciellt id varje gång uc:n körs.
Med classic ASPs getRows() så skulle det vara en baggis att ex. först mata in databasens innehåll med getRows() och sedan hämta det med ett unikt index varje gång UCn körs. ... Men nu är asp.net vi snackar, då vet jag inte hur jag skall göra. Tips tack :)

Medlem sedan jan. 20012 204 inlägg
#2

Kan du inte bara hämta in det från Page_Load() i din usercontrol eller förstår jag fel?

Kanske gör det ändå, om jag gör det så kanske du du menar att du vill lägga till kontroller dynamiskt.
Page.Controls.Add(..) i Page_Load() i din .aspx kanske kan vara något att kolla på då.

Medlem sedan okt. 20041 556 inlägg
#3

Jo, visst men det är bara vilken metod som skall användas. Men datatable kanske funkar på ungefär liknande sätt. http://www.developerfusion.co.uk/show/4566/2/

Medlem sedan jan. 20012 204 inlägg
#4

Ja en datatable/dataset/datareader är väl ungefär vad du vill om du vill ha data från t.ex en databas.

Medlem sedan okt. 20041 556 inlägg
#5

Kan jag sätta en global variabel som jag ökar på med ett(1) varje gång som UC:n körs?
Hur gör jag det?

Medlem sedan jan. 20012 204 inlägg
#6

T.ex

if(Session["Var"] != null)
{Session["Var"] += 1;} else {Session["Var"] = 0;}

och lägg den i page_load i din user_control så ökas den med 1 varje gång den laddas. Du

Medlem sedan okt. 20041 556 inlägg
#7

Ok, men måste jag kladda med sessioner? Det handlar bara om en sida, och värdet skall inte tas med till andra sidor, utan bara ifrån uc till uc så att säga.

Medlem sedan jan. 2007152 inlägg
#8

Bör väl funka med get och set i din uc. En publik variabel som du sätter till ett värde, nästa gång du anropar en funktion så ökar du bara på med 1. Lite pseudokod:

private int x = 0;
public int X {
  set {
    x = value;
  }
  get {
     return x;
  }
}

Så kan du hämta o sätta din variabel från den sida där du har inkluderat din uc. Och man kan även göra så här om man vill sätta värdet i presentationslagret:

<uc:bla X="10" runat="server" />

Medlem sedan okt. 20041 556 inlägg
#9

Ok, men var plussar jag på värdet?
Det var att slippa göra det i presentationslagret som jag ville skapa en global variabel som "plussades" på med ett varje gång uc:n anropades på en sida.

Detta ger alltid resultatet 0

private int x = 0; 

public int cnt { 
 get { 
   return x += 1; 
 } 
 set { 
   x = value; 
 } 
} 

void Page_Load(object sender, EventArgs e) 
{ 
 lbl1.Text = x.ToString; 
}
Medlem sedan juni 20019 024 inlägg
#10

Ett alternativt sätt att skicka med värden är via HttpContext.Items. Klassen delas av alla objekt och kan fungera som en "cache" för varje åtkomst (request). Då blir det en baggis att få ta del av egna objekt, oberoende om de skapats i en UserControl, WebControl eller i en vanlig Page.

(Om jag nu har förstått din fråga rätt, jag är inte helt säker.)

Medlem sedan jan. 20012 204 inlägg
#11

Travoni skrev:

Ok, men var plussar jag på värdet?
Det var att slippa göra det i presentationslagret som jag ville skapa en global variabel som "plussades" på med ett varje gång uc:n anropades på en sida.

Detta ger alltid resultatet 0

private int x = 0; 

public int cnt { 
 get { 
   return x += 1; 
 } 
 set { 
   x = value; 
 } 
} 

void Page_Load(object sender, EventArgs e) 
{ 
 lbl1.Text = x.ToString; 
}

Vart är den koden hämtat ifrån? Din webcontrol? I så fall så blir det 0 eftersom din variabel inte delas mellan instanserna.

Medlem sedan okt. 20041 556 inlägg
#12

Japp, den kommer ifrån controllen.

...eftersom din variabel inte delas mellan instanserna

...och därav min fråga. ;)

Medlem sedan dec. 19996 522 inlägg
#13

Du kan ju lägga den i Application

Medlem sedan okt. 20041 556 inlägg
#14

Detta verkar funka:

I Page_Load()

Context.Items["cnt"] += 1;

lbl.Text = Context.Items["cnt"];
Medlem sedan dec. 19996 522 inlägg
#15

Ja det är ett sätt att representera state i asp.net, men då är den unik för varje besökare, inte delad, men det var nog bara jag som tolkade dina behov fel, tolkade att alla skulle dela den, my bad.

261 ms totalt · 4 externa anrop · v20260731065814-full.2f471f9e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)