在 CSHTML 页面中实现 switch 语句

我想做点不一样的事。我有一个包含 ID 的视图。根据 Id 的值,我想更改出现的标题。比如:

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

我有相当多的情况下条件,所以我认为使用情况将是最好的。有人能告诉我怎样才能做到吗?我得到了很多语法错误,所以我认为它可能没有编写好。

94687 次浏览

您的开关需要完全封闭在一个块,它需要“破坏”适当:

// 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;
}
}

因为 <h1>标记本身是封闭的 html 块,所以可能不需要使用 <text>块进行分离。这是我的习惯,包括他们。

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

不需要将整个 switch 语句封装在 @{}块中(不像 Joel Etherton 的文章)

你的错误基本上是常见的语法错误,与剃刀没有任何关系;

  1. 变量不在括号里

  2. 开关本体不在支架上

  3. 第一句话后没有“休息”。

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

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

@{
String txt;
switch (id) {
case "test":
txt = "Test";
break;
case "prod":
txt = "Prod";
break;
default:
txt = "WTF";
}
}


<h1>@txt Site</h1>

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