【问题标题】:comment between else and {else 和 { 之间的注释
【发布时间】:2012-01-05 09:35:29
【问题描述】:

我刚开始使用 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";
  }
}

我收到警告,但在运行时它在 else 行中出现异常:

应为“{”,但找到了“/”。块语句必须包含在“{”和“}”中。您不能在 CSHTML 页面中使用单语句控制流语句。

显然编译器不喜欢 else 和 { 之间的 cmets。我还尝试使用 @* 和 /* 进行评论,这给出了类似的错误消息。

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


免责声明:

是的,我知道我可以像这样简单地修复它:

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

但是它不符合我们的编码指南,并且在同一行添加注释使我的意图更加清晰。

【问题讨论】:

  • 您的编码指南要求您对每个else 语句添加注释,其中包含对前面if 的否定?你在if ... else if ... else if ... else 链中做什么?
  • 不,就在最后一个 else 当 if 检查值列表时,将来可能会扩展。例如if(val == Enum.Val1){...} else if(val == Enum.Val2){...} else //must be Enum.Val3, though Val4 might be added in the future

标签: asp.net .net asp.net-mvc asp.net-mvc-3 razor


【解决方案1】:

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

话虽如此,何必在意呢?我的意思是你不应该在 Razor 页面中编写代码。 Razor 页面旨在用作视图。在 ASP.NET MVC 中,视图用于显示视图模型中的一些信息,这些信息是从控制器操作传递给它的。标记主要,与 HTML 帮助器混合并显示来自视图模型的信息。但是 C# 代码是不行的。因此,您所称的 代码 以及您在问题中显示的内容在 Razor 视图中完全无关。

【讨论】:

  • 我同意达林的观点。如果视图中有这么多代码,则意味着您的模型很弱。您可以轻松地将这个逻辑移动到您的模型中。
  • 嗯,我的例子并没有真正展示我试图做什么,在我的真实代码中,我根据某些条件写出文本。但你是对的,我只是偶然发现并不重要WebForms 没有这个限制,所以我虽然错过了一些东西。
  • @NULL,然后将代码从您的真实示例移动到帮助器、控制器、模型......这取决于它打算做什么。
  • @Darin:我没有考虑到这个相对简单的逻辑,但这是一个好主意。谢谢!
  • @DarinDimitrov:只是一个愚蠢的问题,我试过使用@**@ cmets,在 VS2010 编辑器中没有错误消息,但令人惊讶的是,在渲染视图时它会用相同的语法错误。 @**@ cmets 不应该在渲染之前以某种方式剥离吗?
猜你喜欢
  • 2012-06-25
  • 1970-01-01
  • 2015-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-28
  • 2017-07-05
  • 2023-03-31
相关资源
最近更新 更多