views:

6455

answers:

12

I am exploring ASP.NET MVC and I wanted to add jQuery to make the site interactive. I used StringTemplate, ported to .Net, as my template engine to generate html and to send JSON. However, when I view the page, I could not see it. After debugging, I've realized that the $ is used by the StringTemplate to access property, etc and jQuery uses it too to manipulate the DOM. Gee, I've looked on other template engines and most of them uses the dollar sign :(.

Any alternative template engine for ASP.Net MVC? I wanted to retain jQuery because MSFT announced that it will used in the Visual Studio (2008?)

Thanks in Advance :)

+4  A: 

Perhaps jQuery.noConflict will work for you

John Sheehan
I think this option is not applicable for StringTemplate. Stringtemplate is not a JavaScript library. The noConflict() is used when another JavaScript library is used and that library uses the $
OnesimusUnbound
Why not use "jQuery" instead of "$"
ANaimi
I always wanted the '$' :). Anyway, you have a point ANaimi :). I guess I can let go of the '$'
OnesimusUnbound
+1  A: 

Have you tried $$ or /$ to escape the dollar signs in string template? I'm not sure about ST specifically but thats how most template engines work.

As for other templating engines, I really loved nVelocity when I used it on a project.

flukus
ST uses \$ to denote it as $ when the engine generates the output, but it looked awkward. Well, I might look on nVelocity and see if I'll like it. :)
OnesimusUnbound
Follow up. nVelocity has an issue for $ (http://www.mail-archive.com/[email protected]/msg00098.html) but then nVelocity looks cleaner.
OnesimusUnbound
+3  A: 

Have a look at the mvccontrib project. They have 4 different view engines at the moment which are brail, nhaml, nvelocity and xslt.

http://www.codeplex.com/MVCContrib

Joel Cunningham
+7  A: 

I would highly recommend Spark. I've been using it for awhile now with jQuery and haven't ran into a single issue so far.

Chris Canal
Spark won't collide with jQuery because $ is only recognized directly in front of an {expression}. There's no valid jQuery statement that starts with "${".
loudej
Spark looks very promising. I seemed to like it.
OnesimusUnbound
I've been using Spark a lot lately, and it's been working great so far. highly recommended.
dave thieben
+3  A: 

In case you want to stick with StringTemplate (ST) see this article from the ST wiki. You may also change the behaviour totally by editing Antlr.StringTemplate.Language\DefaultTemplateLexer.cs and replacing the "$" with what you want.

Elias Manesiotis
A: 

You could try jsRepeater.

Donny V.
+9  A: 

You can of course move your js logic into a .js file. But if you want it inline with your StringTemplate views, you can escape it using the \$ construct.

In addition, you can simply use the jQuery("selector"), instead of $("selector") construct if you want to avoid the escaping syntax.

Here's a good article on using StringTemplate as a View Engine in MVC.

There's also an accompanying OpenSource engine, along with some samples.

Also, as mentioned above, you can modify your Type Lexer. (make it an alternate character to the $).

jamisonLikeCode
using jQuery instead of $ is a good habbit anyway, since prototype and ms ajax libraries hijack $ anyway, and you want to know explicitly what is jQuery and what is not so good.
DevelopingChris
+6  A: 

JQuery can be disambiguated by using the jQuery keyword like this:

jQuery(

instead of this:

$(

I would consider this a best practice. It eliminates any possibility of clashing with another library, and makes the code more readable.

Robert Harvey
+2  A: 

I really like the syntax in Django, so I recommend NDjango :)

Kenny Eliasson
+1  A: 

JsonFx.NET has a powerful client-side templating engine with familiar ASP.NET style syntax. The entire framework is specifically designed to work well with jQuery and ASP.NET MVC. You can get examples of how to build real world UI from: http://code.google.com/p/jsonfx-examples/

McKAMEY
+1  A: 

I've been using ANTLR StringTemplate for ASP.NET MVC project. However what I did was to extend the StringTemplate grammar (template.g) to recognize '%' (aspx.template.g) as delimiters. You can find these files if you download the StringTemplate.net version. I generated the corresponding files: AspxTemplateLexer.cs, AspxTemplateParser.cs, AspxTemplateParserTokenTypes.cs and AspxTemplateParserTokenTypes.txt.

In addition I altered StringTemplateLoader.cs to recognize the extensions .aspx and .ascx which Visual Studio recognizes. This way I am not stuck with the .st extension and clients don't know the difference.

Anyway after rebuilding StringTemplate I have the behavior that I want. What I like about StringTemplate is that it does NOT permit ANY code to be embedded in the template. It looks like Spark like the default ASP/MVC template is code permissive which makes the templates less portable.

I would prefer is "<%" and "%>" as delimiters but unfortunately the ANTLR grammar seems somewhat difficult and fragile to alter unless someone else has done it. On the other had StringTemplate has a great support community and a great approach to separation -- which is the point of MVC.

+1  A: 

You may need this .NET Template Engine. If you wish to use '$' character, simply use '$$'. See the code below:

{%carName = "Audi R8"/}

{%string str = "This is an $carName$"/}

$str$
$$str$$

the output will be

This is an Audi R8
$str$