måndag 26 mars 2012

Bättre intro till WebMatrix

Det finns en betydligt lättare intro till WebMatrix än Joe StagnersWeb Development 101 using WebMatrix verkar vara helt ny och innehåller tyvärr några fel som förvirrar. Det är konstigt att inte Microsoft kontrollerar sina exempel.

När jag testat exemplet har jag ersatt filmtitlar med webbar. Det ger mig möjlighet att spara referenser till webbar om WebMatrix och jag får samtidigt en något djupare förståelse av exemplet.

Part 1, Getting Started with WebMatrix
Här är det enda felet länkarna i listan Related Categories.

Part 2, Create your first Web Page
Här står det "Choose the HTML file type, and call it default.html and press OK. ". Det är fel. Exemplet förutsätter att man väljer en cshtml-fil. Mycket enkel förklaring som även den med begränsade kunskaper i html bör kunna följa.

Här är det inga fel vad jag sett, men man nämner inte heller det utmärkta stöd som WebMatrix ger vid inskrivningen av CSS. Det kan bero på att denna funktion nog kom med version 2  av programmet och exemplet först gjorts för version 1.

Part 4, Using Layout
Här står det "Up to now you’ve been creating HTML pages that use the .htm or .html extension", men det är fel. Den extension som används är cshtml.

I detta avsnitt introduceras Razor. Först tas den inledande och avslutande delen av koden från Part 4 ("movies.cshtml") bort och läggs i egna filer. Sedan läggs kommandot @RenderPage("PageHeader.cshtml") och @RenderPage("PageFooter.cshtml") till den återstående koden. Det som händer är att när movies.cshtml exeveras är att RenderPage först inkluderar koden från "PageHeader.cshtml" resp "PageFooter.cshtml". Det är precis som include i gamla ASP.

Ett bättre sätt att administrera kod som är gemensam för flera sidor är skapa en layoutfil, i exemplet kallad "_siteLayout.cshtml". Starttecknet "_" gör att filen inte kan accessas utifrån utan endast från andra filer på siten.

Den sidspecifika koden anropar layoutfilen med konstruktion
@{
Layout = "~/_siteLayout.cshtml";
}
först i koden och anger med @RenderBody() var i layoutfilen den sidspecifikat koden ska placeras. Det känns lika baklänges, men man vänjer sig kanske.

Ett alternativt sätt att anropa layoutfilen är att exkludera den från den sidspecifika filen och i stället placera den i filen "_PageStart.cshtml", som alltid exekveras först om den finns i systemet.

Part 5, Using Data
Det är mycket enkelt att skapa tabeller. Synd dock att exemplet inte stämmer med WebMatrix 2. Det skapar dock inga större problem. Det slarvfel jag gjorde ledde dock till helt missvisande felmeddelanden. Lösningen var att ta bort columns och regstrera dem igen. Ändra funkade inte.

Databasen läses med
@{
var db= Database.Open("Movies");
var sqlQ = "SELECT * FROM Favorites";
var data = db.Query(sqlQ);
}
Det ska bli intressant att se vilka andra metoder än Query som objektet Databas har.

För att läsa respektive post använder exemplet
@foreach(var row in data)
Detta Razorkommande beskrivs inte närmare. "var row" är uppenbarligen en deklaration, men hur fungerar "in data"?

Part 6, Creating an Add Data page

För att lägga till data används
@{
var MovieName="";
var MovieGenre="";
var MovieYear="";
if(IsPost){
MovieName=Request["formName"];
MovieGenre=Request["formGenre"];
MovieYear=Request["formYear"];
var SQLINSERT = "INSERT INTO Favorites (Name, Genre, ReleaseYear) VALUES (@0, @1, @2)";
var db = Database.Open("Movies");
db.Execute(SQLINSERT, MovieName, MovieGenre, MovieYear);
}
}
" VALUES (@0, @1, @2)" är nollbaserade index till variablerna i Execute-kommandot.

Part 7, Creating an Edit Data Page

Här hämtas en post med
var id=Request["id"];
var SQLSELECT = "SELECT * FROM Favorites where ID=@0";
var db = Database.Open("Movies");
var Movie = db.QuerySingle(SQLSELECT,id);
"@0" pekar på id i QuerySingle.

I form används koden
<form action="" method="post">
<p>Name:<input type="text" name="formName" value="@MovieName" /></p>
Även här används Razorkommando som motsvarar <%=MovieName%> i ASP.

Uppdateringen sker med
var SQLUPDATE = "UPDATE Favorites Set Name=@0, Genre=@1, ReleaseYear=@2 WHERE id=@3";
db.Execute(SQLUPDATE, MovieName, MovieGenre, MovieYear,id);
Om man kör detta program utan parameter kommer felmeddelandet
Serverfel i tillämpningsprogrammet /.
Det går inte att utföra bindning under körning för en null-referens 
Inte särskilt upplysande.

Part 8, Creating a Delete Data page

Här finns inget nytt som är WebMatrix-specifikt.

Part 9, Deploying your site

Detta är ett intressant avsnitt som jag dock inte fördjupat mig in än, då jag inte valt webbhotell. Det ser dock väldigt enkelt ut. Det finns ett 40-tal hotell som Microsoft certifierat, erbjuder shared hosting och ASP.net 4.5 Beta vilket bör inkludera WebMatrix 2. Men inget av dem finns i Sverige. Men det kommer...

Inga kommentarer:

Skicka en kommentar