使用它们时,Razor使用Javascript失败

时间:2012-05-03 13:40:46

标签: javascript asp.net-mvc razor

我最近开始building my views,以便在我切换到测试驱动开发后提高代码的质量和可维护性。

这有很大帮助,编译器根据已重命名的变量或其他类似的东西在我的视图中发现了一些缺陷。

然而,现在,当我构建我的解决方案时,我看到了一些误报。下面是一些在运行之前运行良好的代码示例,但现在无法编译:

<script type="text/javascript">
var url = null;

@{
    Html.Raw("url = 'doesnt work';");
}

url = "@Url.Action("DoesNotWorkEither")";

</script>

请记住,当我在服务器上执行它而不首先构建视图时,这实际上会运行!

收到错误

    代码@{

    中的
  • 无效字符

  • 预期';'代码url = "@Url.Action("DoesNotWorkEither")";

如何解决这些错误?

更新1

应该注意的是,忽略此错误对我来说不是一个选择。你看,它甚至无法构建(因为我启用了视图构建)。这意味着它也无法在我的构建服务器上构建,在那里我有门控签入(在构建之前不允许签入,并且已经运行了测试)。

更新2

正如在回答的评论中向我解释的那样,这显然只是一个可以忽略的Visual Studio解析器错误。构建服务器实际上也会构建视图并告诉您视图中是否存在具体错误,但会忽略误报。

1 个答案:

答案 0 :(得分:3)

这些错误来自Visual Studio的Javascript解析器,它不了解Razor 它们与构建系统无关。

你可以放心地忽略它们。

您可以使用注释和字符串文字从Javascript解析器隐藏Razor代码,如下所示:(未经测试)

<script type="text/javascript">
var url = null;

/*@{ 
    Html.Raw(" *"+"/ url = 'doesnt work'; /*");
} */

url = '@Url.Action("DoesNotWorkEither")';

</script>

更好的解决方法是创建扩展方法,使用您需要的数据发出<script>标记,然后根本不要在<script>中调用Razor。