【问题标题】:Implementing a switch statement in a CSHTML page在 CSHTML 页面中实现 switch 语句
【发布时间】:2011-11-12 23:05:52
【问题描述】:

我正在尝试做一些不同的事情。我有一个包含 ID 的视图。根据 Id 的值,我想更改出现的标题。比如:

@{ switch id
   case "test": @;<h1>Test Site</h1>
   case "prod": @:<h1>Prod Site</h1>
   break;
}

我有很多案例条件,所以我认为最好使用案例。谁能建议我如何做到这一点并让它发挥作用?我收到了很多语法错误,所以我认为它可能没有很好地编码。

【问题讨论】:

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


    【解决方案1】:
    @{
        String txt;
        switch (id) {
            case "test":
                txt = "Test";
                break;
            case "prod":
                txt = "Prod";
                break;
            default:
                txt = "WTF";
        }
    }
    
    <h1>@txt Site</h1>
    

    最简洁:减少冗余或重复的代码和标记。

    【讨论】:

      【解决方案2】:
      @switch (id)
      {
          case "test": <h1>Test Site</h1>
          break;
          case "prod": <h1>Prod Site</h1>
          break;
      }
      

      无需将整个 switch 语句包含在 @{} 块中(与 Joel Etherton 的帖子不同)

      您的错误基本上是常规语法错误,与 razor 无关;

      1. 变量不在括号中

      2. switch 的主体不在括号内

      3. 第一条语句后没有“break”。

      【讨论】:

        【解决方案3】:

        这并不能回答您的问题,如问题标题所示,但它确实解决了您在问题正文中描述的问题。

        使用视图模型类作为视图模型并添加包含switch 语句的方法。然后只需通过@Model.MethodWithSwitchStatement() 从视图中调用该方法。 [id 可以保存在视图模型对象中。]

        【讨论】:

        • 这是解决 OP 中描述的问题的正确方法
        【解决方案4】:

        您的开关需要完全封闭在一个块中,并且需要正确“断开”:

        // Use the @{ } block and put all of your code in it
        @{
            switch(id)
            {
                case "test":
                    // Use the text block below to separate html elements from code
                    <text>
                        <h1>Test Site</h1>
                    </text>
                    break;  // Always break each case
                case "prod":
                    <text>
                        <h1>Prod Site</h1>
                    </text>
                    break;
                default:
                    <text>
                        <h1>WTF Site</h1>
                    </text>
                    break;                   
            }
        }
        

        因为&lt;h1&gt;标签本身是封闭的html块,你可能不需要&lt;text&gt;块来分隔。包含它们只是我的习惯。

        【讨论】:

        • 无需将整个 switch 语句括在 @{} 块中。
        • 你也可以去掉&lt;text&gt;&lt;/text&gt;。如果您使用 html 标签,则不需要。请参阅下面@yoelhalb 的答案。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多