You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Razor Pages中@:标记格式异常/IntelliCode失效及逻辑判断错误咨询

@:标记的合法性说明

@:是Razor语法中官方明确支持的合法标记,作用是显式声明当前行内容为纯文本/HTML,不需要被Razor引擎解析为C#服务端代码,本身不存在设计缺陷。

问题触发原因

你当前的用法不符合Razor解析器的默认工作逻辑:Razor会自动扫描成对的HTML标签做语法校验,你将<div>开标签单独用@:输出、且拆分放在if分支中,闭标签放在其他逻辑位置的写法,会破坏解析器的标签匹配规则,进而引发连锁问题:

  • 解析器误将部分C#代码识别为HTML内容输出,导致if逻辑不生效
  • 语法树解析错误触发IDE的IntelliCode功能异常
  • 最终输出的HTML标签配对混乱,页面渲染格式错乱

不需要全量HTML写入if/else的替代方案

两种方案都可以实现你拆分输出标签的需求,且不会触发解析异常:

  1. 使用@Html.Raw()输出零散标签
    直接调用该方法输出你需要的开闭标签,Razor不会对该方法输出的内容做标签匹配校验:
if (i == (Model.CellsNotStarted.Count - 1) && i % 2 != 0)
{
    @Html.Raw("<div class=\"col-md-6\">")
}
// 后续业务代码
// 对应位置输出闭标签
@Html.Raw("</div>")
  1. 使用<text>标签包裹零散标签
    如果要输出的内容是多行,用<text>标记比反复写@:更便捷,同样不会触发自动标签校验:
if (i == (Model.CellsNotStarted.Count - 1) && i % 2 != 0)
{
    <text>
    <div class="col-md-6">
    </text>
}

注意:无论用哪种方案,都需要保证业务逻辑执行完成后,最终输出到前端的HTML标签是严格成对闭合的,否则依然会出现前端渲染格式错误。

内容的提问来源于stack exchange,提问作者Henrique Pombo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 12:09:03