【发布时间】:2011-12-19 11:18:15
【问题描述】:
我正在使用 ASP.Net MVC 3 Razor 视图引擎。
我需要根据我的视图模型中的值在我的视图中生成一些 JavaScript 代码。我需要使用的值是一个布尔值,在这个例子中我们称之为IsSet。
所以我想做的是基于这个值创建一个 JavaScript 布尔值,以便稍后在脚本中使用。
请记住,对于以下所有示例,我的视图顶部都有这段代码...
@{ string IsSet = Model.IsSet ? "true" : "false"; }
注意:以下所有示例均为 JavaScript。
第一次尝试...
var IsSet = @(IsSet);
...这确实有效,问题是它破坏了 VS 2010 中的自动格式化(CTRL + E,D),因为 JavaScript 格式不正确 - 正如您所料,这是不可接受。
第二次尝试...
var IsSet = "@(IsSet)";
...我知道,JavaScript 很聪明,它会在需要时自动解析我的字符串。哎呀,忘了它是一个字符串类型,除了空之外的任何东西都会评估为真。
第三次尝试...
var IsSet = Boolean("@(IsSet)");
....这肯定行得通...不,再次将非空字符串转换为真(错误的解析器!)
第四次尝试...
var IsSet = "@(IsSet)" === "true";
终于有一个可行的方法,但对我来说看起来不太好。
如果需要,我会使用它,但最终我的问题是:有没有更好的方法来处理这种情况?也许,我第一次尝试时出现的不良行为只是 Microsoft 可能忽略的事情?
如果有人对我有一个漂亮而整洁的第五次尝试,那就太好了。
对我来说重要的是 VS 2010 中的自动格式化不会中断
谢谢
【问题讨论】:
-
我必须同意你的第一次尝试——这对我来说看起来是最自然的,因为你没有先进行字符串化,然后再投射一些本来就已经是布尔值的东西!我在我的 Razor / JS 代码中大量使用了这种技术,它似乎工作正常,而且我没有看到自动格式化有任何问题,但我确实使用了 ReSharper,所以也许它会自动修复它!
-
我使用 ReSharper,但仍然遇到自动格式化问题,所以我不确定这就是您没有遇到格式化问题的原因。当 Pascal 大小写的 Razor 变量出现在格式化程序将强制小写命名的位置时,会出现自动格式化和大写问题,例如 HTML 标记名称或 JS 代码(主要是 camelCase;特别是,格式化程序在自动缩进时启动发生了......所以克里斯,我有一种预感,你可能有不同的情况?
标签: javascript asp.net-mvc-3 razor