13. oktober 2004 - 10:26Der er
10 kommentarer og 1 løsning
Sætte den samme værdi på mange labels
Hvordan sætter jeg den samme værdi på mange labels i en repeater?
Jeg har en repeater som skal vise nogle medarbejder, den skal så for hver medarbejder skrive eks. "navn: ", dvs navn kommer til at stå mange gange på siden. Jeg bruger sattelite assemblies på min side, og det vil sige at når man vælger engelsk skal der ikke stå navn men Name.
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
hvad i alverden... jeg er helt sikker på at jeg skrev noget her ?!?! nå - det kan være at vinduet havde stået åbent længe... så kan man vist godt risikere at teksten smutter når man poster... jeg prøver igen :o)
kan du ikke vise mig din repeater-template (eller i hvert fald det relavante af den) - og så lige pege ud hvad det helt præcist er du gerne vil have "lokaliseret" - så skal jeg se om jeg ikke kan give en hånd.
beklager at jeg ikke lige var opmærksom - håber det går.
Jeg har f.eks. en label i min repeater som har id="navn", jeg vil så gerne tilgå alle de instancer af dette label fra min code behind for at sætte teksten på denne label. Der skal stå den samme tekst i alle disse labels!
umiddelbart er det mest nærliggende at du fikser det i dit ItemCreatedEvent - eller at du alternativt direkte skriver i din template at teksten skal hentes fra en eller anden property - du kan lige se et par muligheder : (der er sådan lidt forudsætninger hist og her om at du har nogle metoder eller lignende til at gøre arbejdet... så GetString("name") repræsenterer altså et kald til en klasse der returnerer en lokaliseret præsentation af en tekst du kan tilgå via nøglen "name"... håber det er forståeligt).
det er bare skrevet her, så det kompilerer sikkert heller ikke sådan lige umiddelbart.
---------
// i ItemCreated private void Repeater1_ItemCreated(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e) { Label name = (Label)e.Item.FindControl("lblName"); name.Text = SomeResource.GetString("name"); }
-----------
// en model hvor du direkte i templaten angiver at du vil trække teksten på en <asp:Label id="lblName" runat="server" Text='<%# NameString %>'></asp:Label>
// og i koden ville du så have : protected string NameString { get{return SomeResource.GetString("name");} }
-----------
virker lige så fint med en metode <asp:Label id="lblName" runat="server" Text='<%# GetString("name") %>'></asp:Label>
og du kunne måske gå direkte på din resource : <asp:Label id="lblName" runat="server" Text='<%# SomeResource.GetString("name") %>'></asp:Label>
------------
Det var bare liget et par småeksempler... vanligvis kan du også lave en del af arbejdet én gang for alle i en baseklasse for dine forms... så kan du have nogle generelle metoder til den slags, eller måske endda udvide din page_lifecycle med et kald til en metode hvor du fikser det hele... altså overskriver nødvendige tekster for den aktuelle form.... og det bliver så sidste eksempel i denne omgang :
hvis du sikrede pr. baseclass (eller i hver enkelt code-behind) at metoden LocalizePage() blev kaldt - kunne den fikse lokalisering i repeateren sådan her :
protected void LocalizePage() { foreach(RepeaterItem ri in someRepeater.Items) { ((Label)ri.FindControl("lblName")).Text = SomeResource.GetString("name"); }
// og der kunne så være meget andet : }
---------
håber du kan bruge det til et eller andet.... du skal bare spørge hvis der er noget jeg har for ringe :o)
mvh (undskyld det tog lidt tid før jeg vendte tilbage)
hvis du skriver sådan her i din repeater - bliver det jo kørt for alle linier (selvom du kun skriver det én gang), men en vanlig "pc-cpu" kan jo ikke lave mere end én ting ad gangen alligevel ;o)
Hvis du har en masse objekter du vil have ændret en property på, vil det altid foregå i et eller andet form for loop alligevel (hvad enten det er en "indbygget" kommandu du kalder, eller noget du skriver selv)...
Metoden "hentBillede" retunere så værdien der skal stå på de labels.
Jeg vil gerne have så få asp.net tags i min aspx kode, derfor synes jeg at det vil være pænere hvis jeg bare kunne kalde alle de labels det samme og på den måde tilgå dem på engang.
Men dette er ikke muligt? Og hvis ikke er løsningen med metoden der retunere teksten så den den bedste 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.