else和{之间的评论

voi*_*oid 11 .net asp.net asp.net-mvc razor asp.net-mvc-3

我刚开始使用Razor而不是WebForms-ViewEngine.现在在我的Razor-View中我有这样的事情:

@{
  int i = 42;
  string text;
  if (i == 42)
  {
    text = "i is 42!";
  }
  else //i is not 42 //<- Error here
  {
    text = "i is something else";
  }
}
Run Code Online (Sandbox Code Playgroud)

我得到一个警告,在运行时它在else行中得到一个异常:

期望"{"但找到"/".块语句必须用"{"和"}"括起来.您不能在CSHTML页面中使用单语句控制流语句.

显然,编译器不喜欢else和{之间的注释.我也尝试用@*和/*进行评论,它给出了类似的错误消息.

反正有没有像我想要的那样在剃刀上发表评论?


免责声明:

是的我知道我可以像这样解决它:

@{
  int i = 42;
  string text;
  if (i == 42)
  {
    text = "i is 42!";
  }
  else
  { //i is not 42
    text = "i is something else";
  }
}
Run Code Online (Sandbox Code Playgroud)

但是它不符合我们的编码指南,并且对同一行的评论使我的意图更加明确.

Dar*_*rov 12

这就是Razor解析器的构建方式.如果您不喜欢它的方式,您可以随时在MS连接上提交错误/功能请求,并希望人们会投票支持它,它将在未来版本的解析器中修复/实现.我个人不会因为我不在乎(见下面原因).

这就是说,为什么要关心?我的意思是你不应该在Razor页面中编写代码.Razor页面旨在用作视图.在ASP.NET MVC中,视图用于显示视图模型中从控制器操作传递给它的一些信息.标记主要,与HTML帮助器混合并显示视图模型中的信息.但是C#代码是不行的.所以你所谓的代码和你在问题中显示的内容在Razor视图中严格无关.

  • 我同意Darin的观点.如果视图中有这么多代码,则意味着您的模型很弱.您可以轻松地将此逻辑移动到模型中. (2认同)