Spark View Engine on WebForms
Spark view engine is a neat little web utility that allows you to write code like this:
<viewdata products="IEnumerable[[Product]]"/> <ul if="products.Any()"> <li each="var p in products">${p.Name}</li> </ul> <else> <p>No products available</p> </else>
If your eye skipped over it because it looks just like html I wouldn’t blame you. But look again. Loops and conditions are nicely embedded in html. Spark really does let the html dominate (which can be a good thing). These are but a few of all the nice features. If you have them, spend a couple of minutes browsing the spark documentation to learn what’s more.
To learn a bit about the inner workings of this wonderful tool I set out to add WebForms support. The spark codebase has a very testable design and can be coerced to help out in a WebForms control without modification. The end result look like this:
<spark:View runat="server"> <ul if="Container.GetProducts().Any()"> <li each="var p in Container.GetProducts()">${p.Name}</li> </ul> <else> <p>No products available</p> </else> </spark:View>
Download and usage
To use it download
and unzip into your bin folder.
Register the control in web.config:
<pages> <controls> <add tagPrefix="spark" namespace="Spark.Web.Forms" assembly="Spark.Web.Forms"/>
Add something useful to iterate over to your page or user control:
public string[] Values; protected void Page_Load(object sender, EventArgs e) { Values = new string[] { "Simple", "As", "Pancake" }; }
And add the spark control:
<spark:View runat="server"> <ul> <li each="var c in Page.Values">${c}</li> </ul> </spark:View>
Future improvement ideas
Some features are definitely missing (and they might require modification of the spark code itself):
- Spool content from a spark view controls placed later in the control tree
- Cache the compiled views
- Support the spark cache element
The code is over here.
Its good to see the new rendering engines coming out. This looks promising but so does Razor - who will win :)!
Is it possible to use Razor with WebForms?
Awesomesauce Cristian!
@Magnus On Scot Gu's blog he says to "watch this space" when talking about Razor with classic web forms. Not sure when that will be though!
Thanks David! Maybe I'll go with Spark for now then, it is indeed nice to be able to do loops etc, and to do it without butt ugly syntax.
@Magnus, is there a particular feature from Razor that you're missing in sparks?
@Stefan, no just curious :)
For one client, we actually allowed them to have Spark code in an EPIServer XHTML property. When the page rendered, a Page Adapter executed the Spark markup, so they could alter the HTML output down to the single word or sentence based on external criteria.
Awesome work! I would really love it if you would continue improving this as I think this could be extremely useful, especially combined with MVP.