在CSHTML页面中实现switch语句

时间:2011-09-08 12:27:05

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

我正在尝试做一些与众不同的事情。我有一个包含Id的视图。根据Id的值,我想改变我出现的标题。类似的东西:

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

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

4 个答案:

答案 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的帖子不同)

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

  1. 变量不在括号中

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

  3. 第一次发言后没有“休息”。

答案 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>

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