为什么c#在剃刀中用js解码

时间:2017-09-19 02:26:39

标签: c# asp.net razor

对不起,伙计们,我的英语不太好,所以请尽量理解。

以下是代码:

@{
    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&amp;b=2

请向我解释,谢谢。

2 个答案:

答案 0 :(得分:4)

您正在查看编码版本

http://example.com?a=1&amp;b=2

因为在剃刀中,当您使用@前缀时,razor会在呈现执行以下表达式的结果之前执行HTML编码。因此,您看到@已更改为&amp;

如果您不希望发生这种情况,可以使用不进行编码的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>