我有以下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不会显示。
有谁知道发生了什么事?
答案 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>
}