23. juli 2004 - 23:51Der er
57 kommentarer og 1 løsning
Link button og variabel text ?
Hejsa,
Jeg har lavet et sprogmodul hvor folk kan vælge sprog på min side, nu vil jeg så gerne have det således at der automatisk skiftes sprog på mine linkbuttons men det kan jeg ikke helt hitte rede i her kommer min idé :
Jeg bruger C#, og hvis jeg laver sådan en her i aspx-filen : <asp:LinkButton id="LinkButton1" text="<%# arrLinkTekst[1] %>" runat="server"/> Og sådan en her i mon code-behind protected string[] arrLinkTekst = {"hej","med","dig","du","gamle"};
Mht.... dit arrLoginArray, så kan jeg ikke rigtig se hvordan <asp:LinkButton id="LinkButton1" text="<%# arrLinkTekst[1] %> Skulle udløse den slags... Der må ligge noget andet kode et sted der bruger det array.
Dim arrLoginArray As Array = Split(mlb.ShowLanguage(Session("setLanguage")), ",")
Så splitter jeg mit array op i arrLoginArray(0), arrLoginArray(1) osv.
Men hvorfor jeg ikke kan få lov at vise det fatter jeg ikke, det er jo sikkert bare en eller anden dum lille ting jeg mangler, for jeg kan godt smide det ien label.
Hvis du angiver noget som nedenstående i aspx / ascx filen <asp:LinkButton id="LinkButton1" text="<%# arrLinkTekst[1] %> Vil du ikke få det med mindre du databinder.
Protected arrLinkTekst As System.Collections.Specialized.StringCollection
#Region " Web Form Designer Generated Code "
'This call is required by the Web Form Designer. <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
End Sub
'NOTE: The following placeholder declaration is required by the Web Form Designer. 'Do not delete or move it. Private designerPlaceholderDeclaration As System.Object
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init 'CODEGEN: This method call is required by the Web Form Designer 'Do not modify it using the code editor. InitializeComponent() arrLinkTekst = New System.Collections.Specialized.StringCollection arrLinkTekst.Add("hej") arrLinkTekst.Add("med") arrLinkTekst.Add("dig") arrLinkTekst.Add("du") arrLinkTekst.Add("gamle") End Sub
#End Region
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Put user code to initialize the page here DataBind() End Sub
End Class
Og så stadig den gamle : <asp:LinkButton id="LinkButton1" text="<%# arrLinkTekst(1) %>" runat="server"/>
Ja det kan jeg godt følge dig i men når så jeg har min sprog modul liggende i en seperat .vb fil hvor mit array bliver lavet så kan jeg ikke helt se sammenhænget i dette :o(
jeg prøver at rode lidt mere med det du har da hjulpet mig et godt stykke vej.
Du spurgte om hvordan du fik <asp:LinkButton id="LinkButton1" text="<%= arrLinkTekst(3)%>" runat="server"/> Til at virke.
Om du initialiserer arrayet med en metode fra en anden klasse gør ikke nogen forskel, og du kan sådan set også databinde direkte til en property i den anden klasse, så længe den bare er deklereret i din form-klasse, og initialiseret inden du kalder DataBind().
Jeg laver lige et lille eksempel - jeg forsøger mig i VB. Du har det om lidt.
Damn... Det er da noget underligt noget sådan noget VB ?!? Nå - men her får du et eksempel, hvor ressourcen liggen i en anden klasse, men alligevel bliver tilgået direkte fra din page-klasse.
Imports System.Collections.Specialized Public Class WebForm1 Inherits System.Web.UI.Page
Private m_languageResource As LanguageResource Protected ReadOnly Property LanguageStrings() As StringCollection Get Return m_languageResource.ResourceStrings End Get End Property
#Region " Web Form Designer Generated Code "
'This call is required by the Web Form Designer. <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
End Sub
'NOTE: The following placeholder declaration is required by the Web Form Designer. 'Do not delete or move it. Private designerPlaceholderDeclaration As System.Object
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init m_languageResource = New LanguageResource End Sub
#End Region
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Put user code to initialize the page here DataBind() End Sub End Class
// Og din ressourceklasse :
Imports System.Collections.Specialized
Public Class LanguageResource Private m_strResourceStrings As StringCollection
Public ReadOnly Property ResourceStrings() As StringCollection Get Return m_strResourceStrings End Get End Property
Public Sub New() m_strResourceStrings = New StringCollection m_strResourceStrings.Add("hej") m_strResourceStrings.Add("med") m_strResourceStrings.Add("dig") m_strResourceStrings.Add("du") m_strResourceStrings.Add("gamle") End Sub
hvis nu man tænker sig lidt om så er det jo nødagtig det samme som med en label :
'---Label Label.Text = arrLoginArray(1)
'---linkButton Linkbutton.Text = arrLoginArray(1)
Og vupti det hele er som det skal være så det var bare dejligt, men dine ideer ovenfor har da klart åbnet nye døre for min viden, og helt klart noget jeg lige skal have kigget noget mere på :o)
Jeps - det er fuldstændig det samme, men der er forskel på at angive det på den måde i koden, og på at angive på aspx-siden med efterfølgende databinding. Du skriver bare hvis du få mere ballade med det. Mvh - og held og lykke med det.
Ja det kan jeg se men jeg skal jo blot bruge det som tekst hvis så det er fra database der skal hentes link navn så er det en anden snak men det skulle der være styr på og ellers ved jeg jo hvor jeg kan hente hjælp :o)
Hey jeg har lidt flere spm. når nu jeg kommer til at lege med dine ideer oven for. iførste omgang prøver jeg mig frem med din ide i 24/07-2004 00:46:06
Men når jeg prøver med databind f.eks arrLogin(0) eller arrLogin(1) får jeg denne fejl :
Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index
Og det er i en linie hvor min label forkommer som denne :
Public MustInherit Class Login Protected WithEvents Label1 As System.Web.UI.WebControls.Label Protected arrLogin As System.Collections.Specialized.StringCollection
#Region " Web Form Designer Generated Code "
'This call is required by the Web Form Designer. <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
End Sub
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init 'CODEGEN: This method call is required by the Web Form Designer 'Do not modify it using the code editor. InitializeComponent() arrLogin = New System.Collections.Specialized.StringCollection() Dim setLanguage As String setLanguage = Session("setLanguage") Select Case setLanguage Case "da" arrLogin.Add("Login") arrLogin.Add("Brugernavn") arrLogin.Add("Adgangskode") arrLogin.Add("Glemt Adgangskode") arrLogin.Add("Ny Bruger") End Select End Sub
#End Region
Public Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load DataBind() End Sub End Class
Koden oven for ligger i en .ascx fil som bruges på en .aspx side på denne .aspx side har jeg i page_load sat min Session("setLanguage") = "da" så det burde være i orden men jeg tjekker lige for en sikkerheds skyld :o)
Jeg får fejl ved debug noget i stil med at der ikke skulle være rettigheder til at debugge, men jeg satte lige en Case Else ind for at teste og så virkede det så der er lige noget jeg skal tjekke op på :o)
Det var så lidt... Hvis du søger på msdn efter lifecycle of af page, og lifecycle of a control, skal du nok finde nogle gode oversigter over det. Hvis du ikke har held med dig må du lige skrive - så skal jeg nok finde dem og poste dem her.
Det er sådan set det samme... Page er en specialisering af TemplatedControl, som igen er en specialisering af Control, men der er en lidt overordnet her også :
Hvis du vil håndtere eventet skal du selv hooke op til det - ligesom det er gjort med page_load. Du kan dog gjort få det gjort automatisk, hvis du angiver AutoEventWireup="false" i aspx-filen (i dit page-directive).... Så skal du bare skrive metoden. Dit page-directive er f.eks. sådan en her : <%@ Page language="c#" Codebehind="CodeBehind.aspx.cs" AutoEventWireup="false" Inherits="Sample.CodeBehind" %>
Nu tror jeg klokken er ved at være for mange igen for det fattede jeg ikke en klap af :o)
Men hvis jeg f.eks har en function der lukker for database i et component kan jeg så ikke blot bare kaldde den function i selve componentet når jeg har hentet data ind i dataset ? Hvilket bringer mig vidre til næste spørgsmål skal datasetet også fjernes fra hukommelse eller sker det automatisk og hvordan fjerner jeg evt. datasetet ?
Og hvad angår det med min session("setLanguage") så kan jeg sætte den default til at være "da" i global.asax filen under Sub Session_Start på den måde får jeg sat sprog på min side og derefter er det i en usercontrol der fortages skift af sprog og så virker det hele fint :o)
Jeg ved ikke om jeg fik det sagt men det er blot 14 siden jeg tog hul på brugen af vb.net, asp.net og vs.net så jeg er meget grøn endnu så den med muligheder for localization siger mig ikke meget, men stadig hvis jeg vil sætte nogle tekster på i forskelligt sprog er det vel op til mig at få det programmeret da der ikke er nogle der ved hvad jeg vil have stående på min side ?
Mht det med sprog - så har du naturligvis ret. Teksterne skal du naturligvis angive selv, men der er gode muligheder for at få hjælp til at få tal og datoer præsenteret korrekt, og samtidig lade frameworket stå for udvælgelsen af de tekster der skal vises. Men det kan være vi lige skal vente lidt med det.
Hvad arbejdede du i før du gik igang med .NET og VS - og hvor længe ?
Jeg har arbejdet meget med asp, vb, vba, html, css, photoshop, flash.......osv og det jeg gjort de seneste 5 - 6 år
Det med hvor du bor var fordi jeg vil prøve at samle et mindre hold der kunne mødes en gang imellem og udveksle erfaringer hvad angår programmereing, design og andre sjove ting til både internet og som programmer, men hvis du ikke er fra eller omkring trekants området (Jylland) er det jo nok for langt at skulle køre rundt, som ikke andet :o)
Ja det er jeg desværre ikke... Jeg bor på Sjælland. Det lød ellers som et godt arrangement.
Men websam... Jeg vil hoppe i æsken.
Vi skrives jo nok ved igen :o) - og hvis du har så lang erfaring synes jeg det ville være en god idé hvis du kiggede lidt på .NET globalization inden du laver for meget omkring det selv. Jeg hjælper som sagt gerne.
Ja sov godt og jeg tror jeg er med på hvad du snakker om det er det her med at få sat dato, valuta osv. afhængigt af hvilket land personen kommer fra eller afhængigt af hvilket sprog brugerens browser har eller hvad man sætter den til at være ved valg af sprog !?!
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.