2011-09-08 83 views
41

我试图做一些不同的事情。我有一个包含Id的视图。基于Id的值,我想改变出现的标题。例如:在CSHTML页面中实现switch语句

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

我有相当多的案件条件,所以我虽然使用的情况下会是最好的。任何人都可以建议我怎样才能做到这一点,并得到它的工作?我收到很多语法错误,所以我认为它可能编码不好。

回答

103

你的交换机需要被完全封闭在一个块,它需要“破”正确:

// 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>块分离。包含它们只是我的习惯。

+10

无需将整个switch语句放在@ {}块中。 –

+1

你也可以摆脱''。如果您使用的是html标签,则不需要。请参阅下面的@yoelhalb的答案。 – mattruma

+0

您也可以使用@:操作符... – bicbmx

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

没有必要包围整个switch语句中@{}块,(不像乔尔·埃瑟顿的职位)

你的错误基本上都是正规的语法错误,并没有任何做剃须刀;

  1. 变量是不是在括号

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

  3. 没有“破发”的第一条语句之后。

2

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

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

+0

这是解决OP中描述的问题的正确方法 – simoneL