17

我正在探索 ASP.NET MVC,我想添加 jQuery 以使站点具有交互性。我使用移植到 .Net 的 StringTemplate 作为我的模板引擎来生成 html 并发送 JSON。但是,当我查看该页面时,我看不到它。调试后,我意识到 StringTemplate 使用 $ 来访问属性等,jQuery 也使用它来操作 DOM。哎呀,我看过其他模板引擎,其中大多数都使用美元符号:(。

ASP.Net MVC 的任何替代模板引擎?我想保留 jQuery,因为 MSFT 宣布它将用于 Visual Studio(2008 年?)

提前致谢 :)

更新

请转到ASP.NET MVC 视图引擎比较问题中的答案,以获取 ASP.NET MVC 模板引擎的完整列表,以及它们的优缺点

更新 2

最后,我将把包括 JQuery 在内的 JavaScript 代码放在一个单独的脚本文件中,因此我不会担心$模板文件中的混合。

更新 3

更改了标题以反映我需要解决的问题。毕竟“Y 中最好的 X”是非常主观的问题。

4

14 回答 14

13

您当然可以将 js 逻辑移动到 .js 文件中。但是,如果您希望它与您的 StringTemplate 视图内联,则可以使用 \$ 构造对其进行转义。

此外,如果您想避免转义语法,您可以简单地使用 jQuery("selector"),而不是 $("selector") 构造。

这是一篇关于在 MVC 中使用 StringTemplate 作为视图引擎的好文章。

还有一个随附的开源引擎,以及一些示例

此外,如上所述,您可以修改您的 Type Lexer。(使其成为 $ 的替代字符)。

于 2009-02-14T20:13:26.300 回答
10

我强烈推荐Spark。我已经用 jQuery 使用它一段时间了,到目前为止还没有遇到过一个问题。

于 2008-10-08T16:19:49.610 回答
7

JQuery 可以通过使用 jQuery 关键字来消除歧义,如下所示:

jQuery(

而不是这个:

$(

我认为这是一种最佳做法。它消除了与另一个库发生冲突的任何可能性,并使代码更具可读性。

于 2009-05-22T02:18:22.497 回答
6

也许jQuery.noConflict会为你工作

于 2008-10-06T04:32:16.187 回答
3

看看 mvccontrib 项目。他们目前有 4 种不同的视图引擎,分别是 brail、nhaml、nvelocity 和 xslt。

http://www.codeplex.com/MVCContrib

于 2008-10-06T19:50:10.560 回答
3

如果您想坚持使用 StringTemplate (ST),请参阅 ST wiki 中的这篇文章。您也可以通过编辑Antlr.StringTemplate.Language\DefaultTemplateLexer.cs并用您想要的替换“ $ ”来完全改变行为。

于 2008-10-27T18:44:45.483 回答
3

我真的很喜欢 Django 中的语法,所以我推荐 NDjango :)

于 2009-07-18T12:23:26.377 回答
1

您是否尝试过 $$ 或 /$ 来转义字符串模板中的美元符号?我不确定 ST 的具体情况,但这就是大多数模板引擎的工作方式。

至于其他模板引擎,当我在项目中使用 nVelocity 时,我真的很喜欢它。

于 2008-10-06T04:44:05.960 回答
1

JsonFx.NET具有功能强大的客户端模板引擎,具有熟悉的 ASP.NET 样式语法。整个框架专为与 jQuery 和 ASP.NET MVC 一起工作而设计。您可以从以下网址获取有关如何构建真实 UI 的示例:http ://code.google.com/p/jsonfx-examples/

于 2009-09-20T15:34:25.670 回答
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 的重点。

于 2010-03-18T22:25:07.857 回答
0

你可以试试jsRepeater

于 2008-11-02T03:46:46.537 回答
0

您可能需要这个.NET 模板引擎。如果您想使用 '$' 字符,只需使用 '$$'。请看下面的代码:

{%carName = "Audi R8"/}

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

$str$
$$str$$

输出将是

This is an Audi R8
$str$
于 2010-05-09T23:10:00.407 回答
0

Template如果我正确理解 StringTemplate 第 4 版,您可以在(或TemplateGroup)构造函数中定义自己的转义字符。

于 2011-05-11T10:16:43.610 回答
0

发现 Mustache 是用于 .Net 项目(Web 和后端)的最简单、最易于使用、最轻量的全功能模板引擎

适用于 .Net 3.5(这意味着它不需要动态类型和 .Net 4.0 即可用于混合类型模型,如 Razor)。

我最喜欢的部分是能够在其中嵌套任意 ​​IDicts 并使引擎做正确的事情。这使得强制所有引擎重新装箱步骤超级简单:

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 种左右受支持的语言中的工作方式完全相同。

于 2012-11-06T18:47:09.753 回答