Thanks for the heads-up about the Codeplex link.
It's really fun and motivational to see the source.
(I hope there aren't too many calls from the community to open source at all costs.)
My initial little comment on the code - I'll leave the internal/interfaces debates to others who know more about it - is over Html element ids. In the code, it appears setting htmlId to name in TagBuilder.cs and adding this to the RouteValueDictionary, means trying to set a custom id gives an "An item with the same key has already been added" error. I need custom ids to allow multiple forms per page for the same entity type.
string htmlID = name;
<%
= Html.TextBox("search", "Enter search term", new { id = "search-input" })%>
Or am I doing something basic wrong to get a custom element id?