MVC 4 Razor如果拆分div标签

use*_*585 14 razor asp.net-mvc-4

我有以下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++;
}
Run Code Online (Sandbox Code Playgroud)

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

有谁知道发生了什么?

Dar*_*rov 33

尝试Html.Raw使用@以下内容为呼叫加前缀

@for (int i = 1; i <= 100; i++) 
{
    if (currentCol == 1) 
    {
        @Html.Raw("<div class=row>");
    } 
    if (currentCol == maxCol) 
    {
        @Html.Raw("</div>");
    }
    currentCol++;
}
Run Code Online (Sandbox Code Playgroud)


Bra*_*tie 11

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

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

if (condition){
  @Html.Raw(@"<div class=""row"">")
}else{
  @Html.Raw("</div>")
}
Run Code Online (Sandbox Code Playgroud)

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

if (condition){
  <text>
    <div class="row">
  </text>
}else{
  <text>
    </div>
  </text>
}
Run Code Online (Sandbox Code Playgroud)

请记住,@Razor解析器的符号意味着您正在从一种语言转换到另一种语言(尽管是HTML代码,反之亦然).所以,既然你是一个if(...)块并且Html.Raw实际上正在输出HTML,你需要使用@.


小智 6

您还可以使用:

if(condition){
 @:<div>
}

if(condition){
 @:</div>
}
Run Code Online (Sandbox Code Playgroud)