Ny kreativitet med CSS

Under de senaste sju åren har webbdesign kört fast i en visst spår. Det hela började med upptäckten att man kunde använda tabeller för att skapa layouter för hemsidor. Man använder rader och celler för att placera elementen på sidorna. Detta sätt fungerar ju fortfarande bra men resulterar i svårhanterlig kod som är svår att uppdatera. Tabellerna med sina celler har blivit ett fängelse och gjort oss att fastna i ett visst tänkande hur man bygger upp layouten.

Några började drömma om ett nytt sätt att placera objekten med hjälp av <div> och <span> taggarna. CSS Zen Garden är en webbplats helt dedikerad åt detta nya sätt att skapa design.

Ett problem med det nya sättet att göra design är ju att den mest använda webbläsaren idag, IE6, inte stödjer CSS 2.1 standarderna. Men med IE7 kommer situationen bli mycket bättre och det känns som man på allvar kan anamma de nya teknikerna. Microsoft har gjort en egen "Zen Garden"-design för att visa hur bra IE7 kommer att stödja CSS. Läs mer om exprimentet i artikeln The Zen in 7: Enhanced Styles In Internet Explorer 7.

Eric meyer är en man som forskar mycket i nya CSS ideer och driver en webbplats som heter css/edge. Där visas många exempel på nytänkande tekniker. Där visar han bland annat hur man kan göra effekter genom fixerade bakgrundbilder, popupmenyer i ren CSS och mycket mer.

På Stopdesign.com finns en post som handlar om hur en webbsida görs om för att använda ordnade listor istället för tabeller. Lägre laddningstider och renare kod blir resultatet.

By Jesper Lind

Kopiera tabeller med data i SQL Server

Detta är något jag undrat länge över hur man gör i SQL Server. I en forumstråd hittade jag lösningen på hur man kopierar hela tabeller inklusive data.

Select * Into [DestinationTableName] From [SourceTableName]

Vill man inte ha med data utan bara strukturen kan man använda följande SQL.

Select * Into [DestinationTableName] From [SourceTableName]) Where 1 = 2

Av någon anledning fungerade inte ovanstående skript i SQL Query Analyzer men det beror nog på att jag i mitt fall hade en tabell med namnet "Admin". Den klagade på Invalid object eller likande. Det hela gick bra när jag körde det genom en asp.net applikation.

By Jesper Lind

Shelta.se är online!

http://www.codeodyssey.se/upload/resource/blog/shelta_collage.jpg

Shelta är en butik som ligger på Andra Långgatan i Göteborg och kan lätt klassificeras som göteborgs fräschaste streetwearbutik. Idag släppte vi deras webbshop som vi har jobbat fram under det senaste året. DJ Digga på Shelta har själv gjort den stiliga designen och vi har kodat shoppingsystemet.

Se till att gå och signa upp på nyhetsbrevet. Där får man tips om när det kommer in nya produkter och vad som händer i hoodet. Shelta har märken som 10 Deep, Adidas, ALIFE, aNYthing, Cosby, Idiom, L-R-G, New Balance, New Era, Nike, Obey, Penfield, QWST, RockersNYC, Scifen, Shadow, Stussy, Temple Effectives, Triumvir, Undrcrwn och Westmill.

www.shelta.se 

By Jesper Lind

Felsök: Ogiltigt återanslag- eller återanropselement.

Jag har stött på följande fel några gånger. Det uppstår ofta när man utför AJAX-operationer och byter ut innehållet i komponenter. Speciellt med rullistor har jag problem. Här hittade jag ett forum med några teorier.

Hela felmeddelandet

Ogiltigt återanslag- eller återanropselement. Händelseverifiering aktiveras med <pages enableEventValidation="true"/> i konfigurationen eller <%@ Page EnableEventValidation="true" %> på sidan. Av säkerhetsskäl verifierar denna funktion att argumenten till återanslående- eller återanropshändelser kommer från den serverkontroll som ursprunligen renderade dem. Om data är giltiga och förväntade, bör du använda metoden ClientScriptManager.RegisterForEventValidation för att registrera verifieringsdata.

En enkel lösning kan vara att stänga av event valideringen helt i web.config eller på själva sidan. Men det kan ju vara dumt att gå miste om den extra säkerheten. Injektionsattacker är något att se upp för och event valideringen är till för att skydda mot dessa.

Stänga av i konfigurationen

<system.web>
<pages enableEventValidation="false"/>
</system.web>

Stänga av på en enskild sida

<%@ Page EnableEventValidation="false" ... %>

På OdeToCode.com finns artiklar som beskriver vad Event Validation gör och en till där problemet diskuteras ytterligare.

By Jesper Lind

Hur gör man URL-omskrivning med ASP.NET?

Att ha med .aspx-ändelsen och massa querystring-parametrar på webbadresser känns lite klumpigt ibland, och inte så bra ur sökoptimerings-synpunkt. IIS6 med ASP.NET 2.0 har inte något inbyggt sätt att göra detta. Jag menar istället för för att ha en lång url som "Blog.aspx?year=2006&month=09" är det ju trevligare med "blog/2006/09".

I Ruby on Rails är omskrivning av URL:er enkelt och en naturlig del av språket. På Apache servrar finns mod_rewrite som äe en bra modul för alla PHP-utvecklare.

Med Asp.Net kan man använda HttpContext.RewritePath men det är inte så lätt som man först kan tro. Jag hittade mängder av artiklar om olika lösningar men många beskrev problem med cachning, themes och problem med PostBack.

Urlrewriting.net finns det en open source komponent som sägs ha löst många av dessa problem. Har dock inte provat den själv.

Jag har även läst en del info om att det kommer finnas bättre stöd för detta när IIS 7.0 kommer.

Fler blandade referenser
http://weblogs.asp.net/fmarguerie/archive/2004/11/18/265719.aspx
http://www.aspnetpro.com/NewsletterArticle/2003/09/asp200309pj_l/asp200309pj_l.asp. http://www.developersdex.com/gurus/articles/793.asp?Page=3 http://www.webforum.nu/showthread.php?t=145530. http://www.raftweb.info/SEO/1032.aspx

By Jesper Lind

Inkludera Javascript i head med Asp.Net

Så här gör man för att inkludera Javascript inuti head-taggen genom kod i Asp.Net.

HtmlGenericControl Include = new HtmlGenericControl("script"); Include.Attributes.Add("type", "text/javascript"); Include.Attributes.Add("src","FilSomSkaInkluderas.js"); this.Page.Header.Controls.Add(Include);

Eller för att lägga till en kodsnutt.

HtmlGenericControl Include2 = new HtmlGenericControl("script"); Include2.Attributes.Add("type", "text/javascript");
Include2.InnerHtml = "alert('JavaScript inuti Page Header');"; this.Page.Header.Controls.Add(Include2);

Glöm inte att skriva in runat-attributet på head-taggen

<head runat="server">

Hittade även en artikel om hur man kan få Visual Studio att gruppera javascriptfiler under .aspx-filen i Solution Explorer. Krävs dock ett tillägg i register-nycklarna. Snälla VS utvecklare - lägg till detta direkt i programmet.

By Jesper Lind

Behålla position på scrollbars

Det jag sökte var att kunna behålla positionen på scrollbars efter postback, men bara på vissa knappar. I Asp.Net kan man ju använda SmartNavigation till detta men det fungerar bara i IE (när jag provade senast) och ger en del oväntade buggar som bieffekt. Sen finns det också MaintainScrollPositionOnPostback, som man kan lägga i @Page-direktivet men då sker ompositionering på alla länkar och knappar som utlöser postback. Ibland vill man bara att vissa typer av postningar ska göra det.

Lösningen som använder javascript och två gömda input-fält hittade jag i detta forumet skrivet av Fredrik Normén

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">
<title>Scrollbar position</title>
<script language="javascript">
function SetScrollerPosition()
{
if (document.getElementById("XPos").value != "")
{
var x = document.getElementById("XPos").value;
var y = document.getElementById("YPos").value;
window.scrollTo(x, y);
}

document.getElementById("XPos").value = "0";
document.getElementById("YPos").value = "0";
}

function GetScollerPosition()
{
var scrollX, scrollY;

if (document.all)
{
if (!document.documentElement.scrollLeft)
scrollX = document.body.scrollLeft;
else
scrollX = document.documentElement.scrollLeft;

if (!document.documentElement.scrollTop)
scrollY = document.body.scrollTop;
else
scrollY = document.documentElement.scrollTop;
}
else
{
scrollX = window.pageXOffset;
scrollY = window.pageYOffset;
}

document.getElementById("XPos").value = scrollX;
document.getElementById("YPos").value = scrollY;
}
</script>
</head>
<body onload="SetScrollerPosition();">
<form id="form1" runat="server">
<div>
<asp:GridView …>
<Columns>
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:LinkButton
OnClientClick="GetScollerPosition();"
ID="LinkButton1"
runat="server"
CommandName="Edit"
Text="Edit"></asp:LinkButton>
<asp:LinkButton
ID="LinkButton2"
runat="server"
CommandName="Select"
Text="Select"></asp:LinkButton>
<asp:LinkButton
ID="LinkButton3"
runat="server"
CommandName="Delete"
Text="Delete"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
<input type="hidden" id="XPos" runat="server" />
<input type="hidden" id="YPos" runat="server" />
</form>
</body>
</html>

Under mitt googlande efter detta hittade jag även ett annat intressanta demo på samma ämne. Detta rullar ner en div med overflow till nedersta positionen så fort man lägger till någon i den. Perfekt om man ska göra en AJAX-chatt eller liknande. Detta kommer jag igång att jag försökt lösa tidigare utan lycka.

By Jesper Lind

Junkyard.se öppnar inför hösten

http://www.codeodyssey.se/upload/resource/blog/Junkyard_goes_mega.jpg

Här kommer en liten uppdatering om e-handelsidan Junkyard.se. Ni som känner till sidan väl vet den brukar stängas ner i minst en vecka före säsongsstart. Inatt öppnade vi den igen (enligt tradition cirka 26 timmar försenat).

Som vanligt har vi passat på att göra lite förändringar. Nu finns det två nya avdelningar. Dels Mega Store där man kan se alla produkter från alla avdelningar. Besökarna tyckte det var lite jobbigt att först söka igenom Street avdelningen efter t ex skor och sedan leta på Skate avdelningen. Så nu blir det lite lättare att få överblick. Sen har vi även Moto Store där FMX fans och motor intresserade kan hitta en del roligt.

Design av Fakepilot.com.

By Jesper Lind