MVC 4 Razor如果拆分div标签

时间:2013-08-23 15:44:09

标签: asp.net-mvc-4 razor

我有以下MVC 4 Razor代码:

@for (int i = 1; i <= 100; i++) {

    if (currentCol == 1) {
        Html.Raw("<div class=row>");
    @*Need to do this because can't have a open div within a if compiler doesnt like it *@
    } if (currentCol == maxCol) {
        Html.Raw("</div>");
    }
    currentCol++;
}

我基本上尝试使用if语句的不同路径中的start和end标签有条件地生成每个div类行的内容。当我只使用直接HTML时,编译器不喜欢它并认为括号是关闭的。似乎Html.Raw是我在线搜索的解决方案,但是当我使用Html.Raw时,在查看来源时div不会显示。

有谁知道发生了什么事?

3 个答案:

答案 0 :(得分:30)

尝试使用Html.Raw

@次来电添加前缀
@for (int i = 1; i <= 100; i++) 
{
    if (currentCol == 1) 
    {
        @Html.Raw("<div class=row>");
    } 
    if (currentCol == maxCol) 
    {
        @Html.Raw("</div>");
    }
    currentCol++;
}

答案 1 :(得分:11)

Razor遵循HTML和C#/ VB语法块,这就是分解标签的原因。两种解决方法:

1:使用Html.Raw(正如您所做)

if (condition){
  @Html.Raw(@"<div class=""row"">")
}else{
  @Html.Raw("</div>")
}

2:使用特殊<text>...</text>标签。

if (condition){
  <text>
    <div class="row">
  </text>
}else{
  <text>
    </div>
  </text>
}

请记住,Razor解析器的@符号表示您正在从一种语言转换到另一种语言(尽管是HTML代码,反之亦然)。因此,由于您位于if(...)区块中且Html.Raw实际上正在输出HTML,因此您需要使用@

答案 2 :(得分:6)

您也可以使用:

if(condition){
 @:<div>
}

if(condition){
 @:</div>
}