Views: 4429
Number of votes: 3
Average rating:

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.

Nov 16, 2010

David Knipe
( By David Knipe, 11/16/2010 10:17:36 PM)

Its good to see the new rendering engines coming out. This looks promising but so does Razor - who will win :)!

Magnus Rahl
( By Magnus Rahl, 11/17/2010 8:10:17 AM)

Is it possible to use Razor with WebForms?

stefan.forsberg@valtech.se
( By stefan.forsberg@valtech.se, 11/17/2010 8:54:12 AM)

Awesomesauce Cristian!

David Knipe
( By David Knipe, 11/17/2010 10:31:36 AM)

@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!

Magnus Rahl
( By Magnus Rahl, 11/17/2010 1:20:40 PM)

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.

stefan.forsberg@valtech.se
( By stefan.forsberg@valtech.se, 11/17/2010 1:50:16 PM)

@Magnus, is there a particular feature from Razor that you're missing in sparks?

Magnus Rahl
( By Magnus Rahl, 11/17/2010 7:03:02 PM)

@Stefan, no just curious :)

deane@blendinteractive.com
( By deane@blendinteractive.com, 11/18/2010 2:56:49 AM)

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.

Joel Abrahamsson
( By Joel Abrahamsson, 11/24/2010 6:39:18 PM)

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.

Please login to comment.