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
相关产品推荐
相关产品推荐

