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

ASP.NET Core 3.1.3 MVC中竖线使用报错问题求助

解决ASP.NET Core MVC中User.IsInRole代码里竖线|的语法错误

这个问题我之前也碰到过,是Razor语法解析的小坑!你遇到的Error CS1525 Invalid expression term '|'错误,核心原因是Razor引擎把你用来做链接分隔符的竖线|当成了C#代码里的运算符,而不是要输出的纯文本。在@if的代码块中,Razor会优先尝试解析内容为C#代码,所以单独的|会被判定为无效的表达式术语。

下面给你几种简单的解决方法:

方法1:用@:标记纯文本

在竖线前加上@:前缀,明确告诉Razor这是要输出的纯文本,不是C#代码:

@if (User.IsInRole("Admin")) { 
    <a asp-action="Edit" asp-route-id="@item.Id">Edit</a> @:| 
    <a asp-action="Details" asp-route-id="@item.Id">Details</a> @:| 
    <a asp-action="Delete" asp-route-id="@item.Id">Delete</a> 
}

注意:记得去掉你原代码最后那个多余的|,不然页面上会多一个无意义的分隔符。

方法2:用<text>标签包裹竖线

Razor提供了<text>标签,专门用来输出纯文本内容,不会被解析为HTML标签:

@if (User.IsInRole("Admin")) { 
    <a asp-action="Edit" asp-route-id="@item.Id">Edit</a> <text>|</text> 
    <a asp-action="Details" asp-route-id="@item.Id">Details</a> <text>|</text> 
    <a asp-action="Delete" asp-route-id="@item.Id">Delete</a> 
}

这种写法和方法1效果完全一致,只是风格不同,看你个人习惯选择。

方法3:使用Html.Raw拼接内容(不推荐,但可作为备选)

如果你愿意手动拼接URL,也可以用Html.Raw直接输出HTML内容,这样Razor不会解析其中的文本:

@if (User.IsInRole("Admin"))
{
    @Html.Raw("<a href='" + Url.Action("Edit", new { id = item.Id }) + "'>Edit</a> | ")
    @Html.Raw("<a href='" + Url.Action("Details", new { id = item.Id }) + "'>Details</a> | ")
    @Html.Raw("<a href='" + Url.Action("Delete", new { id = item.Id }) + "'>Delete</a>")
}

不过这种写法不如前两种简洁,而且失去了asp-action标签助手自动处理路由的便利性,所以优先推荐前两种方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 23:37:35