I have been investigating the Spark View Engine as an alternative to the default webforms view engine inside ASP.Net MVC 2.0.
As it says on the Spark website "Spark is a view engine for Asp.Net Mvc and Castle Project MonoRail
frameworks. The idea is to allow the html to dominate the flow and the
code to fit seamlessly. "
While exploring the syntax and features, really liking what I saw, I decided to fork the source code available here and add support for Delphi Prism.
My fork is available on GitHub here, this is a Visual Studio 2008 solution with my additions. I also have an example project. While the modifications are in C#, the example is a Visual Studio 2010 Delphi Prism project using ASP.Net MVC 2. The views, files with the extension .spark contain Delphi Prism code. The example also contains release versions of my fork, so it isn't necessary to download the C# solution.
An example is shown below
<use namespace="OxygeneMVCApplication.Models" />
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<tr each="someEmployee in ViewData.Model.Employees">
The code above creates a table with a number of employee records, the example is also available on my website here.
As a small example this is way more elegant than the equivalent markup using the default aspx view engine.
Taking a more indepth look at the sample project, there a a couple of things that should be pointed out.
1) At the top of the web.config I have configured spark to use Oxygene as the default language.
<section name="spark" type="Spark.Configuration.SparkSectionHandler, Spark"/>
<compilation debug="true" defaultLanguage="Oxygene">
<add assembly="System.Web.Routing, Version=188.8.131.52, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
2) Spark has a rather nice pre-compilation feature which can be used to remove the need to deploy the Oxygene compiler to wherever your website is hosted. My website is hosted at DiscountASP.Net and since the Oxygene compiler hasn't been installed, I have been developing my aspx pages with the language set to C#. Using precompilation I can now develop the views using Oxygene and deploy the views precompiled as an assembly to the bin directly. This is actually how I have been able to deploy the example on my website.
The actual compilation is performed at build time using PostBuildStep.pas, views are compiled into an assembly called Precompiled.dll. This assembly is loaded at runtime. If you take a look at Global.asax.pas there is a method which makes a call to the Spark View Engine passing in an assembly reference.
method Global_Asax.LoadPrecompiledViews(engines: ViewEngineCollection);
var factory: SparkViewFactory := engines.OfType<SparkViewFactory>().First();
The spark views in the example project exercise a number of features. At the moment I'm still exploring and fixing things as I go. I'm in the process of converting an mvc application I'm developing to Spark, things seems to be going well so I have decided to release the source I have available at the moment.
A word of warning, if you want to compile the example you will need to very latest version of the Oxygene compiler found in Delphi Prism XE.
Any feedback welcome is welcome..