我正在探索ASP.NET MVC,我想添加jQuery以使网站具有交互性。我使用StringTemplate移植到.Net,作为我的模板引擎生成html并发送JSON。但是,当我查看页面时,我看不到它。调试之后,我意识到String用于访问属性等$,而jQuery也使用它来操作DOM。哎呀,我看过其他模板引擎,其中大多数使用美元符号:(。
ASP.Net MVC的任何替代模板引擎?我想保留jQuery,因为MSFT宣布它将用于Visual Studio(2008?)
提前致谢:)
更新
请转到the answer问题中的ASP.NET MVC View Engine Comparison获取ASP.NET MVC模板引擎的完整列表及其优缺点
更新2
最后,我将把JavaScript代码(包括JQuery)放在一个单独的脚本文件中,因此我不担心模板文件中的$
混合。
更新3
更改了标题以反映我需要解决的问题。毕竟“Y中最好的X”是非常主观的问题。
答案 0 :(得分:13)
您当然可以将js逻辑移动到.js文件中。但是如果你想让它与你的StringTemplate视图内联,你可以使用\ $ construct。
来转义它此外,如果要避免转义语法,可以简单地使用jQuery(“selector”)而不是$(“selector”)构造。
这是关于using StringTemplate as a View Engine in MVC的好文章。
还附带OpenSource engine, along with some samples。
另外,如上所述,您可以修改您的Type Lexer。 (使它成为$的替代字符)。
答案 1 :(得分:10)
我强烈推荐Spark。我现在用jQuery已经使用了一段时间,到目前为止还没有遇到过一个问题。
答案 2 :(得分:7)
可以通过使用jQuery关键字消除JQuery的歧义:
jQuery(
而不是:
$(
我认为这是一种最佳做法。它消除了与其他库冲突的任何可能性,并使代码更具可读性。
答案 3 :(得分:6)
也许jQuery.noConflict会对你有用
答案 4 :(得分:3)
看看mvccontrib项目。他们目前有4种不同的视图引擎,分别是brail,nhaml,nvelocity和xslt。
答案 5 :(得分:3)
如果您想坚持使用ST wiki中的StringTemplate(ST)see this article。您也可以通过编辑 Antlr.StringTemplate.Language \ DefaultTemplateLexer.cs 并将“ $ ”替换为您想要的内容来完全改变行为。
答案 6 :(得分:3)
我非常喜欢Django中的语法,所以我推荐NDjango:)
答案 7 :(得分:1)
您是否尝试使用$$或/ $来逃避字符串模板中的美元符号?我不确定ST是否具体,但这就是大多数模板引擎的工作方式。
至于其他模板引擎,当我在项目中使用它时,我真的很喜欢nVelocity。
答案 8 :(得分:1)
JsonFx.NET具有强大的客户端模板引擎,具有熟悉的ASP.NET样式语法。整个框架专门设计用于与jQuery和ASP.NET MVC一起使用。您可以从http://code.google.com/p/jsonfx-examples/
获取如何构建真实世界UI的示例答案 9 :(得分:1)
我一直在为ASP.NET MVC项目使用ANTLR StringTemplate。然而,我所做的是扩展StringTemplate语法(template.g)以识别'%'(aspx.template.g)作为分隔符。如果下载StringTemplate.net版本,可以找到这些文件。我生成了相应的文件:AspxTemplateLexer.cs,AspxTemplateParser.cs,AspxTemplateParserTokenTypes.cs和AspxTemplateParserTokenTypes.txt。
此外,我更改了StringTemplateLoader.cs以识别Visual Studio识别的扩展名.aspx和.ascx。这样我就不会遇到.st扩展名,客户端也不知道其中的区别。
无论如何重建StringTemplate后我都有我想要的行为。我喜欢StringTemplate的是它不允许任何代码嵌入到模板中。看起来Spark像默认的ASP / MVC模板一样是代码许可的,这使得模板的可移植性降低。
我更喜欢“<%”和“%>”作为分隔符但不幸的是,ANTLR语法似乎有点难以改变,除非有其他人这样做。另一方面,StringTemplate有一个很好的支持社区和一个很好的分离方法 - 这是MVC的重点。
答案 10 :(得分:0)
您可以尝试jsRepeater。
答案 11 :(得分:0)
您可能需要此.NET Template Engine。如果你想使用'$'字符,只需使用'$$'。请参阅以下代码:
{%carName = "Audi R8"/}
{%string str = "This is an $carName$"/}
$str$
$$str$$
输出将是
This is an Audi R8
$str$
答案 12 :(得分:0)
如果我正确理解了StringTemplate版本4,您可以在Template
(或TemplateGroup
)构造函数中定义自己的转义字符。
答案 13 :(得分:0)
发现Mustache是.Net项目(Web和后端)中最简单易用,最简单易用,最轻巧的全功能模板引擎
适用于.Net 3.5(意味着它不需要动态类型,而.Net 4.0适用于混合类型模型,如Razor)。
我最喜欢的部分是能够嵌套任意ID并让引擎做正确的事情。这使得强制性的所有引擎重新装箱步骤变得非常简单:
var child = new {
nested = "nested value"
};
var parent = new {
SomeValue = "asdfadsf"
, down = child
, number = 123
};
var template = @"This is {{#down}}{{nested}}{{/down}}. Yeah to the power of {{number}}";
string output = Nustache.Core.Render.StringToString(template,parent);
// output:
// "This is nested value. Yeah to the power of 123"
关于Mustache最美的是,相同的模板在纯JavaScript或20种左右支持的语言中完全相同。