Razor Pages中@:标记格式异常/IntelliCode失效及逻辑判断错误咨询
@:标记的合法性说明
@:是Razor语法中官方明确支持的合法标记,作用是显式声明当前行内容为纯文本/HTML,不需要被Razor引擎解析为C#服务端代码,本身不存在设计缺陷。
问题触发原因
你当前的用法不符合Razor解析器的默认工作逻辑:Razor会自动扫描成对的HTML标签做语法校验,你将<div>开标签单独用@:输出、且拆分放在if分支中,闭标签放在其他逻辑位置的写法,会破坏解析器的标签匹配规则,进而引发连锁问题:
- 解析器误将部分C#代码识别为HTML内容输出,导致if逻辑不生效
- 语法树解析错误触发IDE的IntelliCode功能异常
- 最终输出的HTML标签配对混乱,页面渲染格式错乱
不需要全量HTML写入if/else的替代方案
两种方案都可以实现你拆分输出标签的需求,且不会触发解析异常:
- 使用
@Html.Raw()输出零散标签
直接调用该方法输出你需要的开闭标签,Razor不会对该方法输出的内容做标签匹配校验:
if (i == (Model.CellsNotStarted.Count - 1) && i % 2 != 0) { @Html.Raw("<div class=\"col-md-6\">") } // 后续业务代码 // 对应位置输出闭标签 @Html.Raw("</div>")
- 使用
<text>标签包裹零散标签
如果要输出的内容是多行,用<text>标记比反复写@:更便捷,同样不会触发自动标签校验:
if (i == (Model.CellsNotStarted.Count - 1) && i % 2 != 0) { <text> <div class="col-md-6"> </text> }
注意:无论用哪种方案,都需要保证业务逻辑执行完成后,最终输出到前端的HTML标签是严格成对闭合的,否则依然会出现前端渲染格式错误。
内容的提问来源于stack exchange,提问作者Henrique Pombo
相关产品推荐
相关产品推荐

