我正在尝试做一些与众不同的事情。我有一个包含Id的视图。根据Id的值,我想改变我出现的标题。类似的东西:
@{ switch id
case "test": @;<h1>Test Site</h1>
case "prod": @:<h1>Prod Site</h1>
break;
}
我有很多案例条件,所以我虽然使用案例会是最好的。任何人都可以建议我如何做到这一点并让它工作?我得到了很多语法错误,所以我想也许它编码不好。
答案 0 :(得分:118)
您的开关需要完全封闭在一个区块中,并且需要正确“断开”:
// 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>
块进行分隔。我的习惯就是把它们包括在内。
答案 1 :(得分:42)
@switch (id)
{
case "test": <h1>Test Site</h1>
break;
case "prod": <h1>Prod Site</h1>
break;
}
没有必要将整个switch语句括在@{}
块中(与Joel Etherton的帖子不同)
您的错误基本上是常规语法错误,与剃刀无关;
变量不在括号中
开关的主体不在括号中
第一次发言后没有“休息”。
答案 2 :(得分:2)
这不会回答您的问题,正如问题的标题所示,但它确实解决了您在问题正文中描述的问题。
使用视图模型类作为视图的模型,并添加包含switch
语句的方法。然后只需通过@Model.MethodWithSwitchStatement()
从视图中调用该方法。 [id
可以保存在视图模型对象中。]
答案 3 :(得分:0)
@{
String txt;
switch (id) {
case "test":
txt = "Test";
break;
case "prod":
txt = "Prod";
break;
default:
txt = "WTF";
}
}
<h1>@txt Site</h1>
最简洁的:更少的冗余或重复的代码和标记。