C# - System.Web.HttpParseException 在@if内具有未关闭的 HTML 元素时出错
本文关键字:HTML 出错 元素 Web System HttpParseException @if | 更新日期: 2023-09-27 18:35:05
我有一个简单的HTML,它会根据topic.IsScheduled
的值(bool)而变化:
如果为假:
+-------------------+-------------------+
| row-fluid |
+-------------------+-------------------+
| span6(something1) | span6(something2) |
+-------------------+-------------------+
如果为真:
+-------------------+-------------------+
| row-fluid |
+-------------------+-------------------+
| span6(something1) | span6(something3) |
+-------------------+-------------------+
| row-fluid |
+-------------------+-------------------+
| span6(something2) | span6(something4) |
+-------------------+-------------------+
The razor/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# 给我错误是因为div
语句内没有关闭@if
,而不是因为缺少左/右括号。如果我在 if 中关闭它们,或者只是用 @* *@
注释整个 if ,那么它可以工作。
如何配置忽略HttpParse
甚至关闭它以停止解析我的 HTML?
是的,我可以制作 if/else,但随后我会重复 HTML 和变量,因为解析器很愚蠢,我想避免这种情况。
通常,HTML 元素和 Razor 代码块必须正确嵌套,因此当解析器到达@if
内的第二个</div>
时,它会认为您忘记了结束}
。
要修复此错误,只需在"额外"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>
@:
序列告诉解析器,该行的其余部分是您希望作为包含代码块的一部分包含的内容。
你的代码看起来不错,但 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 的各种奇怪之处,例如空白(或缺少空格)导致运行时异常。