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

ASP.NET MVC Razor视图中a标签href含@报错CS0103的问题

为什么Razor视图中包含@符号的支付URL会触发CS0103错误?

我在ASP.NET MVC Web应用中实现了一个简易支付网关,支付URL里包含@符号,代码如下:

<a href="https://www.somegateway.com/@john_doe/" class="im-checkout-btn btn--light" target="_blank" rel="modal">Checkout With someGateway</a>

该应用使用Razor视图引擎,这段代码在Razor视图里无法正常运行,报错信息如下:

CS0103: The name 'john_doe' does not exist in the current context

但这段代码在普通HTML页面中可以正常使用,请问问题出在哪里?


这问题的根源在于Razor视图引擎对@符号的特殊解析规则。Razor把@作为服务器端代码的触发标记,当它扫描到URL里的@john_doe时,会自动把john_doe识别成一个需要从当前上下文调用的服务器端变量或代码标识符——但你并没有在视图对应的模型、控制器或者视图代码块里定义这个john_doe变量,所以就抛出了CS0103“当前上下文中不存在该名称”的错误。

解决这个问题有两种简单且常用的方案:

  • 使用双@符号转义:这是Razor特有的转义方式,把URL中的单个@替换成@@,Razor就会将其解析为普通的@字符,而不是服务器端代码标记。修改后的代码如下:
<a href="https://www.somegateway.com/@@john_doe/" class="im-checkout-btn btn--light" target="_blank" rel="modal">Checkout With someGateway</a>
  • 使用HTML实体编码:把@符号替换成它的HTML实体&#64;,这种方式适用于所有HTML场景,Razor和浏览器都能正确识别这个实体并渲染成@符号。修改后的代码如下:
<a href="https://www.somegateway.com/&#64;john_doe/" class="im-checkout-btn btn--light" target="_blank" rel="modal">Checkout With someGateway</a>

两种方案都能完美解决问题,如果你是在Razor视图中开发,优先推荐双@转义的方式,更贴合ASP.NET MVC的开发习惯。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:05:31