Tjenare igen! Hej Niklas,Hämta data från codebehind
Ett mindre problem här. Jag har på min aspx en länk och denna länk vill jag hämta från aspx:ns codebehind. Så här ser det ut:'
ASPX
<a href="<%GetProductLink(); %>" class="btn" target="_self"> ....
ASPX.CS
public string GetProductLink()
{
if ("sv-SE".Equals(this.GetCurrentCulture()))
{
productLink += "SWE";
}
else
{
productLink += "ENG";
}
return productLink;
}
Problemet är att jag inte få önskat resultat när jag ställer mig på länken. Metoden returnerar det jag vill men sedan är det något som händer som gör att min länk inte tycks komma ut riktigt på sidan.
Någon som vet vad jag gör för fel?
// nickeSv: Hämta data från codebehind
När du jobbar i ASP.Net så är mitt tips att inte lägga "server"-kod i .aspx sidan. Detta för att det kan bli svårare att underhålla systemet etc.
Det är ett problem att använda "server" kod på attribut i ASP.Net, du kan läsa om alla problem här så slipper jag radda upp dom ;):
http://weblogs.asp.net/leftslipper/archive/2007/01/16/Using-code-expressions-in-properties.aspx
I ditt fall så skulle jag använt mig av kontroller så mkt som möjligt. Det är det ASP.Net är så grymt bra på etc. Så gör om din länk till tex en HyperLink kontroll och sätt dess NavigateUrl till värdet från din metod. Du skulle även kunna använda resurshanteringen i ASP.Net och lägga din länk i den filen per kultur, då skulle du kunna skriva något like med:
<asp:HyperLink navigateUrl='<%$ Resourses, Resource, ProductURL %>' ...>
Med Resources expression så kommer du få ut värdet för strängen ProductURL från resursfilerna som är i XML (Finns bra editor i VS 2005 för att hantera dom).
Tex i din resursfil för svenska har du (resource.sv-SE.resx)
ProductURL = myproduct.aspx?cult=swe
och i din för engelska har du (resource.en-US.resx)
PriductURL = myproduct.aspx?cult?=eng
Då kommer rätt text att hämtas beroende på den kultur som tråden har (den som är satt på Thread.CurrentUICulture.. Som standard så sätts denna kultur automatiskt till den kultur användaren har ställt in i Internet Explorer under Languages.
Ett annat alternativ är att sätta navigateURL från kod som jag nämnde tidigare. Tack vare build providers i VS 2005 så kommer VS att bygga en typad klass av dina resursfiler.. så om du har döpt filen till resource så kan du i kod skriva:
myLink.NavigateUrl = Resources.Resource.ProductURL
coolt va!? Typad resursfil.. ;)
Det va några tips. här har du lite länkar om du vill lära dig mer om localizeringen i ASP.Net 2.0:
http://fredrik.nsquared2.com/ViewPost.aspx?PostId=92
http://quickstarts.asp.net/QuickStartv20/aspnet/doc/localization/default.aspx
/Fredrik Normén [ASP.Net MVP]
blog: http://fredrik.nsquared2.com