在传递给 javascript 的变量内部转义 Razor 中的“@”字符

Escape '@' character in Razor inside variable passed to javascript

我必须将变量中的电子邮件传递给 javascript。像这样:

<button onclick="Send(email)">Send</button>

显然我需要在电子邮件变量中转义“@”字符,因为我收到此错误:"Unexpected token ILLEGAL"

我阅读了这些帖子:Escape @ character in razor view engine Escape @ character in razor view engine 但其中 none 解决了我的问题。我不知道,我做错了什么。

这些帖子几乎包含了我尝试的所有内容:

<button onclick="Send(@email)">Send</button>

结果:正如预期的那样@something.com => 同样的错误

{ 
 var str = email.Replace("@", ("@@"));
}
<button onclick="Send(@email)">Send</button>

结果:某事@@something.com => 同样的错误

<button onclick="Send(@:@email)">Send</button>

结果:服务器错误:“:”在代码块的开头无效

{ 
 var str = email.Replace("@", "&#64;"));
}
<button onclick="Send(@email)">Send</button>

结果:某事&64;something.com => 意外的令牌非法

<button onclick="Send(@(email))">Send</button>

<button onclick="Send(@(@email))">Send</button>

结果:正如预期的那样@something.com => 同样的错误

<button onclick="Send(@@email)">Send</button>

结果:关闭一个。 '@' 被转义,这是呈现 onclick="@email",但不幸的是不在变量电子邮件中。

我尝试了其他各种选项,但没有任何效果。

<text></text>

和 HttpUtility.Encode HttpUtility.JavascriptStringEncode HttpUtility.HtmlAttributeEncode Http.Raw 似乎也不起作用。

我很乐意提供任何建议。真的很想知道我在这里错过了什么。谢谢你。

我认为您的问题不是 Razor 问题,而是 JavaScript。看起来你需要在 @email 周围加引号,因为它是一个字符串,而 JavaScript 抱怨没有它的内容,因为它是非法的。

<button onclick="Send('@email')">Send</button>