对不起,伙计们,我的英语不太好,所以请尽量理解。
以下是代码:
@{
Layout = null;
var str = "http://example.com?a=1&b=2";
}
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Title</title>
</head>
<body>
<script>
$(function() {
console.log('@str');
});
</script>
</body>
</html>
我的期望是http://example.com?a=1&b=2
,但在控制台中,结果为http://example.com?a=1&b=2
。
请向我解释,谢谢。
答案 0 :(得分:4)
您正在查看编码版本
http://example.com?a=1&b=2
因为在剃刀中,当您使用@
前缀时,razor会在呈现执行以下表达式的结果之前执行HTML编码。因此,您看到@
已更改为&
如果您不希望发生这种情况,可以使用不进行编码的Html.Raw
方法
console.log('@Html.Raw(str)');
这将呈现
http://example.com?a=1&b=2
答案 1 :(得分:0)
如果您确定如何从用户输入生成该网址,则仅使用Html.Raw
。此外,您可以先使用Url.RouteUrl
生成网址。
@{
string str = Url.RouteUrl("", new RouteValueDictionary(new { a = 9, b = 2}), "https", "example.com");
}
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script>
$(function() {
console.log('@Html.Raw(str)');
});
</script>