För några månader sedan började jag bygga ett eget litet CMS. Efter att ha jobbat uteslutande med WordPress de senaste åren så valde jag att återgå till ASP.NET som jag tidigare hade jobbat ganska flitigt med. Men då var det ASP.NET webforms som jag använde och nu, några år senare, är det för min del ASP.NET Core Razor Pages som gäller.
Men när det gäller webforms så tycker jag nog att det var lite underskattat iallafall de senare versionerna, de tidiga kan jag inte säga nåt om då jag började med version 4. Det fanns väl en del klagomål om att html-uppmärkningen inte blev så optimerad om man använde vissa av AS:NET webforms så kallade servercontrols (tror jag det hette..). Men hade man lite koll på läget så kunde man undvika dessa. (Jag tror att man kan säga att ASP.NET Core Razor Pages är efterträdaren till webforms. Hursomhelst så gillar jag det.)
När jag började utvecklingen av den nya sajten, eller innehållshanteringssystemet, så började jag med att utveckla databasen. Jag skapade ett diagram i SQL Server Management Studio och lite på måfå började jag skapa tabeller. Jag fick då syn på datatypen XML som jag aldrig använt tidigare. Jag ville att systemet skulle vara så dynamiskt som möjligt. Att administratören skulle, på ett relativt enkelt sätt, kunna bestämma över layout på en sida eller ett inlägg.
Jag tror det finns ett tillägg till WordPress som heter Backend-editor eller WP Bakery, eller nåt liknande. Med detta kan man ändra layouten på en sida/inlägg genom att man kan lägga innehållet i olika kolumner som man kan ändra bredd på. Jag ville ha nåt liknande i systemet som jag jobbade på. Med xml-fältet skulle jag få mer kontroll över innehållet och därmed kunna göra systemet mer flexibelt.

Jag kanske kommer att uppdatera detta inlägg med lite kodsnuttar. Men i stort sett så har jag tre klasser som ”speglar” innehållet i xml-fältet. En klass för rad, en för kolumn och en för innehåll.
Behöver du eller ditt företag hjälp med webben? Besök gärna Nordströms Webb.
Lite kod
Ett par funktioner som serialiserar respektive avserialiserar innehållet till och från datakällan (databasen).
public static string GetXml1(XmlContent list)
{
var serializer = new XmlSerializer(typeof(XmlContent)
, new XmlRootAttribute("Page"));
string xml = string.Empty;
using (var stream = new StringWriter())
{
serializer.Serialize(stream, list);
xml = stream.ToString();
}
return xml;
}
public static XmlContent GetList1(string xml)
{
XmlContent list = null;
using (var reader = new StringReader(xml))
{
XmlSerializer serializer = new XmlSerializer(typeof(XmlContent), new XmlRootAttribute("Page"));
list = (XmlContent)serializer.Deserialize(reader);
}
return list;
}