Felsök: Kalender visar inte valt datum

Detta hör till en av de saker som man kan få problem med vid uppdatering från ramverk 1.1 till 2.0. Symptomet är att markeringen inte syns för vilken dag som är vald. För att få detta att fungera i 2.0 måste man ändra koden enligt följande.

Detta brukade gå bra i 1.1

calendar.SelectedDate = DateTime.Now;

I ramverket 2.0 måste nyckelordet "Today" användas

calendar.SelectedDate = DateTime.Today;

By Jesper Lind

Sätt upp ett RSS-flöde

RSS står för Really Simple Syndication och är en XML-dialekt som följer XML 1.0-specifikationen. RSS är av de nya beståndsdelarna i den "nya webben" och har blivit väldigt populärt på senare tid. Användare kan med egna RSS-läsare, prenumenera på innehåll från en webbplats. Fördelen är enorm genom att man kan från en samlad plats se exakt vilka av ens favoritsajter som har skrivit något nytt. RSS skapar även möjligheten för olika nyhetssajter att publicera innehåll från en annan webbsida.

Jag använde artikeln "Skapa en RSS-feed för din webbplats" som inspiration. Jag skrev om den för att passa till ASP.NET C# samt att jag i mitt kodexempel skriver en fysisk xml fil direkt på hårddisken. I exemplet på Dileno.com läggs xml-filen i cache. Min funktion som skapar ett RSS-flöde av posterna i min blogg och ser ut ungefär så här.

//Funktion som skapar RSS flöde
protected void GenerateRss()
{
try
{

//Fysisk sökväg på servern (Byt ut mot den på din server)
string strXMLPath = "C:/ . . . /rss.xml";

FileStream objFileStream = new FileStream(strXMLPath,FileMode.Create);
XmlTextWriter xtw = new XmlTextWriter(objFileStream,System.Text.Encoding.GetEncoding("iso-8859-1"));
xtw.Formatting = Formatting.Indented;
xtw.WriteStartDocument();

//skriv ut <rss version="2.0">
xtw.WriteStartElement("rss");
xtw.WriteAttributeString("version","2.0");

//skriv ut <channel>
xtw.WriteStartElement("channel");

//skriv ut element som tillhör <channel>
xtw.WriteElementString("title","Codeodyssey.se");
xtw.WriteElementString("link","http://www.codeodyssey.se/");
xtw.WriteElementString("description","Code Odyssey - expanderar webben");
xtw.WriteElementString("language","sv-SE");
xtw.WriteElementString("copyright","Copyright (c) 2004-2006 Code Odyssey");

OleDbConnection conn = new OleDbConnection (strConn);
bool boolPermission = false;
OleDbDataReader objDataReader=null;
try
{
string strSQL = "SELECT Blog.Id, Blog.Title, Blog.Body, Blog.PublishDate FROM Blog ORDER BY Blog.PublishDate DESC";

conn.Open();

OleDbCommand objCommand = new OleDbCommand(strSQL, conn);
objDataReader = objCommand.ExecuteReader();
while (objDataReader.Read() == true)
{
int Id = Convert.ToInt32(objDataReader["Id"]);
string Title = Convert.ToString(objDataReader["Title"]);
string Body= Convert.ToString(objDataReader["Body"]);
//Se till att datum följer RFC-822 standard
string PublishDate = Convert.ToString( ((DateTime)objDataReader["PublishDate"]).ToString("r"));


//skriv ut <item> och dess innehåll
xtw.WriteStartElement("item");
xtw.WriteElementString("title",Title);
xtw.WriteElementString("link","http://www." + strUrl.ToLower() + "/Blog.aspx?id=" + Id);
xtw.WriteElementString("guid","http://www." + strUrl.ToLower() + "/Blog.aspx?id=" + Id);
xtw.WriteElementString("description",Body);
xtw.WriteElementString("pubDate",PublishDate);
xtw.WriteEndElement();
}
objCommand.Dispose();
}
catch (Exception objException)
{
Trace.Warn("GenerateRss() Fel!",objException.Message);
}
finally
{
if(objDataReader!=null)
{
objDataReader.Close();  
}
conn.Close();
}

//skriv ut </channel>
xtw.WriteEndElement();

//skriv ut </rss>
xtw.WriteEndElement();

//Stäng xml skrivaren
xtw.Close();
}
catch (Exception objException)
{
Trace.Warn("GenerateRss() Fel!",objException.Message);
}
}

Visa RSS för läsaren
Sen är det dags att lägga till en länk så att Firefox (och antagligen IE7) ska kunna se att din webbplats innehåller ett RSS-flöde och visa detta med den lilla RSS ikonen.

Denna tagg ser ut så här:

<link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="xml/rss.xml" />

Vill man lägga till en länk till RSS från koden kan man göra så här:

//Lägg till RSS länk
HtmlLink link = new HtmlLink();
link.Attributes.Add("type", "application/rss+xml");
link.Attributes.Add("rel", "alternate");
link.Attributes.Add("href", "feed/rss.xml");
this.Page.Header.Controls.Add(link);

Bilder i RSS?
Först tänkte jag visa de bilder i mitt RSS-flöde men efter ha läst "RSS - bra eller dåligt?" så ångrade jag mig. Speciellt om man ska prenumenera på RSS genom en mobiltelefon så vill man ju inte ladda med en massa bilder i onödan.

Validera bloggen
Till sist är det dags att prova så att allt fungerar som det ska. Mozilla Thunderbirds inbyggda RSS läsare fungerar utmärkt till detta. Eller aktiva bokmärken i Firefox. Man bör även validera CSS-flödet, en valideringstjänst finns på Feedvalidator.org.

By Jesper Lind

Marknadsför dig på bloggportalerna

Ingen har väl missat bloggens intågande på webben. Nu poppar det även upp mängder av portaler där man kan marknasföra sin blogg. Vi testar några av dem.

Bloggtoppen.se
Först ut är Bloggtoppen.se. Registrering är lätt och man får sedan instruktioner om hur man ska gå vidare. Man får man klistra in lite kod i ens blogg för att statistik ska kunna registreras på deras hemsida. En bildlänk hamnar på ens blogg som ser ut som nedan. Sedan är det bara att vänta på att redaktionen på Bloggtoppen ska godkänna din blogg. Det kan ta några dar men de meddelar att de siktar på att godkänna bloggar inom 48 timmar.

Knuff.se
Härnäst tänkte jag prova på Knuff.se och har läst igenom hur man ska göra. Man måste ha ett RSS flöde i anknytning till sin blogg samt pinga Nyligen.se för att det ska indexeras.

Bloggkartan.se
Bloggkartan.se är en geografisk bloggportal som visar bloggar i Sverige kategoriserat efter områden. För att få med din blogg här ska man lägga in den på Nyligen.se och se till att den kommit upp i Knuff.se. Sedan ska man även länka från sin blogg till rätt område på bloggkartan. Jag har placerat min blogg i Göteborg och Majorna på bloggkartan.se. Du kan även se Bloggkartan.se som KML för Google Earth

BlogRanker
En till bloggportal som för tillfället erbjuder bloggar från USA, UK, Sverige och Kina.

By Jesper Lind

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