Håller på med en webbshop, tillsammans med en kamrat, och som snart är klar. Jag landade dock på ett litet problem. Det är en asp:HypeLink Länk som via en Datalist i en Web User Control finns på de flesta sidor på hemsidan och behöver olika länkar beroende på vilken sida den är inne på.
Jag vill att när DepartmentID=# ingår i navigeringsfältet i webbläsaren att asp:HyperLinkens länk ska vara ”product.aspx?ProductID=#&DepartmentID=#” men när jag inte har uppe DepartmentID=# ska länken bara vara ”product.aspx?ProductID=#”. Hur ska jag göra?
NU använder jag aldrig Eval() funktionen på det viset som du gör det av prestandaskäl (och att man lägger affärslogik i prestationssidan.
Så jag skulle råda dig att istället lägga det i codebehind filen med hjälp av eventen som finns på DataList (titta på OnItemCreate / OnItemBound) eventetn så kommer du få mer information.
Men om du envisas med att ha kvar Eval() funktionen så skall du istället kalla på en metod() i din kodbehind som kan returnera en sträng tillbaka till ASP.NET sidan och med denna sträng, modifiera din navigationUrl till dig, Tyvärr kan jag inte hjälpa dig med hur koden skall se ut, då jag inte har en anning om hur det skall göras, då jag aldrig skulle ta den lösningen ;)
Undrar bara, vad ska man använda Eval() funktionen till om den inte är så bra i detta fal?
Det finns säkert fall då man skall använda sig av Eval(), även om jag inte kommer på någon just nu.
Men många av de exempel som man ser på nätet är oftas inte optimerade för vad de skall användas till. Utan mer bara ett exempel på hur man snabbt och enkelt kan få fram önskat resultat, men inte på ett optimal sätt, samt att just i ditt fall, så önskar du ju faktiskt använda Eval() på ett sätt som inte det var tänkt på i exemplet.
Rent generellt så skall du undvika att lägga någon kod i ASPX sidan utan se till så den placeras i codebehind-filerna.
Problemet är bara att jag inte vet vad jag ska göra av med den rödmarkerade texten, man får ju ändra den så att den levererar antingen true eller false, alltså om DepartmentID finns med eller inte i querysträngen. Men jag tror inte detta fungerar ändå.. :(
Och sedan än anna jobbig sak.. Detta hade löst sig mycket enklare om jag bara hade kunnat hitta mina bilder, länkar och texter via codebehindfilerna, om ni förstår vad jag menar, men nu kan jag inte det och jag vet inte varför. Kan det vara så för att de är inne i en DataList, eller? Hur ska jag göra för att komma i kontakt med dem i codebihindfilen?
Antagligen så kan du inte hitta dem eftersom de inte finns ;). Man kan inte hitta dem via id:et eftersom kontrollerna skapas efterhand, man vet ju inte på förhand hur många rader din datalist behöver.
Här kommer dock ett exempel på hur du använder codebehind filen.