Html.Raw结合Url.Action语法报错:Uncaught SyntaxError正则标志无效
解决Uncaught SyntaxError: Invalid regular expression flags错误
这个问题的根源很清晰——你的JavaScript代码把Url.Action生成的URL当成了正则表达式来解析,而不是字符串!
为什么会这样?
当你直接写:
var url = @Html.Raw(@Url.Action("Edit", "Home", new {target = "_blank" , Id = @Model.Id}));
Url.Action会生成类似/Home/Edit/1?target=_blank这样的URL,经过Html.Raw输出后,最终浏览器看到的JS代码是:
var url = /Home/Edit/1?target=_blank;
JS会把以斜杠/包裹的内容识别为正则表达式,而后面的target=_blank被当成了正则的标志位,但这些字符并不是合法的正则标志(合法的比如g、i、m等),所以就抛出了Invalid regular expression flags错误。
修复方案
只需要给生成的URL加上引号,把它明确标记为JavaScript字符串即可:
var url = '@Html.Raw(@Url.Action("Edit", "Home", new {target = "_blank" , Id = @Model.Id}))';
或者更严谨一点,用Json.Encode来确保URL里的特殊字符被正确转义(比如如果URL里有引号或者其他特殊字符时更安全):
var url = @Html.Raw(Json.Encode(Url.Action("Edit", "Home", new {target = "_blank" , Id = @Model.Id})));
这样最终输出的JS代码会是带引号的字符串,JS就会正确识别它为URL字符串,而不是正则表达式了。
内容的提问来源于stack exchange,提问作者Lukas
相关产品推荐
相关产品推荐

