JQuery的$与ASP.Net MVC中的StringTemplate.Net冲突

时间:2008-10-06 04:30:25

标签: asp.net asp.net-mvc templates stringtemplate

我正在探索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”是非常主观的问题。

14 个答案:

答案 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。

http://www.codeplex.com/MVCContrib

答案 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种左右支持的语言中完全相同。