在CSHTML页面中实现switch语句

Mar*_*nne 55 asp.net-mvc razor asp.net-mvc-3

我正在尝试做一些与众不同的事情.我有一个包含Id的视图.根据Id的值,我想改变我出现的标题.就像是:

@{ switch id
   case "test": @;<h1>Test Site</h1>
   case "prod": @:<h1>Prod Site</h1>
   break;
}
Run Code Online (Sandbox Code Playgroud)

我有很多案例条件,所以我虽然使用案例是最好的.任何人都可以建议我如何做到这一点并让它工作?我得到了很多语法错误,所以我想也许它编码不好.

Joe*_*ton 128

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

// 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;                   
    }
}
Run Code Online (Sandbox Code Playgroud)

因为<h1>标签本身是封闭的html块,所以您可能不需要<text>用于分隔的块.把它们包括在内只是我的习惯.

  • 无需将整个switch语句括在@ {}块中. (11认同)
  • 您还可以去掉“&lt;text&gt;&lt;/text&gt;”。如果您使用 html 标签,则不需要它。请参阅下面@yoelhalb 的回答。 (2认同)

yoe*_*alb 46

@switch (id)
{
    case "test": <h1>Test Site</h1>
    break;
    case "prod": <h1>Prod Site</h1>
    break;
}
Run Code Online (Sandbox Code Playgroud)

没有必要将整个switch语句包含在一个@{}块中(与Joel Etherton的帖子不同)

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

  1. 变量不在括号中

  2. 开关的主体不在括号内

  3. 在第一个声明之后没有"休息".


Ken*_*itt 5

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

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