2

我有一个简单的 HTML,它根据topic.IsScheduled的值(bool)变化:

如果为假:

+-------------------+-------------------+
|     row-fluid                         |
+-------------------+-------------------+
| span6(something1) | span6(something2) |
+-------------------+-------------------+

如果真实:

+-------------------+-------------------+
|     row-fluid                         |
+-------------------+-------------------+
| span6(something1) | span6(something3) |
+-------------------+-------------------+
|     row-fluid                         |
+-------------------+-------------------+
| span6(something2) | span6(something4) |
+-------------------+-------------------+

剃须刀/cshtml:

<div class="row-fluid">
        <div class="span6">
            something1
        </div>
    @if (topic.IsScheduled){
        <div class="span6">
            something3
        </div>
    </div>
    <div class="row-fluid">
    }
        <div class="span6">
            something2
        </div>
    @if (topic.IsScheduled) {
        <div class="span6">
            something4
        </div>
    }
</div>

但是当我这样做时,运行项目时出现以下错误:

System.Web.HttpParseException (0x80004005): The if block is missing a closing "}" character. Make sure you have a matching "}" character for all the "{" characters within this block, and that none of the "}" characters are being interpreted as markup. at 

我已经测试过,C# 给了我错误,因为divs 没有在@if语句内关闭,而不是因为缺少开/关括号。如果我在 if 中关闭它们,或者简单地用 if 评论整个 if @* *@,那么它就可以工作。

如何配置为忽略HttpParse甚至关闭它以停止解析我的 HTML?

是的,我可以创建 if/else,但是我会重复 HTML 和变量,因为解析器是愚蠢的,我想避免这种情况。

4

2 回答 2

2

通常,HTML 元素和 Razor 代码块必须正确嵌套,因此当</div>解析器@if到达}.

要修复该错误,只需在“额外”HTML 标记前加上@:如下前缀:

<div class="row-fluid">
    <div class="span6">
        something1
    </div>
@if (topic.IsScheduled) {
    <div class="span6">
        something3
    </div>
@:</div>
@:<div class="row-fluid">
}
    <div class="span6">
        something2
    </div>
@if (topic.IsScheduled) {
    <div class="span6">
        something4
    </div>
}
</div>

@:序列告诉解析器该行的其余部分是您想要作为包含代码块的一部分包含的内容。

于 2013-10-11T22:50:52.717 回答
1

您的代码看起来不错,但 Razor 布局引擎并没有完全解决所有问题,而且您确实对布局/业务逻辑有点花哨。也就是说,你尝试过 KISS 方法吗?因此:

@if (topic.IsScheduled){
    <div class="row-fluid">
        <div class="span6">something1</div>
        <div class="span6">something3</div>
    </div>
    <div class="row-fluid">
            <div class="span6">something2</div>
            <div class="span6">something4</div>
    </div>
} else {
    <div class="row-fluid">
        <div class="span6">something1</div>
        <div class="span6">something2</div>
    </div>
}

我在使用 Razor 时遇到过各种奇怪的情况,例如空格(或缺少空格)在运行时导致异常。

于 2013-10-11T22:20:27.107 回答