2017-09-19 10 views
0

申し訳ありませんが、私の英語はあまり良くありませんので、理解してください。ここでなぜC#はjsで剃刀でデコードされます

コードです:

@{ 
    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です。

私に説明してください、ありがとう。

+0

私は違いを見ませんか? – Se0ng11

+0

その文字列はエンコードされていますか?私はこれらの結果に違いは見られません。私の推測であれば '@ Html.Raw(str)'を使ってください。 –

+0

@panshuあなたの期待と質問の現在の出力は同じです!あなたが投稿したコードでは、現在の出力は 'http://example.com?a=1 & b = 2' – Shyju

答えて

4

あなたが@接頭辞を使用するときにかみそりで、かみそりは、次の式を実行した結果をレンダリングする前にHTMLエンコードを行いますので、あなたは、エンコードされたバージョン

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

を見ています。したがって、あなたは、これが

http://example.com?a=1&b=2 
+0

となります。 – panshu

0

た場合をレンダリングしますあなたはエンコーディング

console.log('@Html.Raw(str)'); 

を行いませんHtml.Rawメソッドを使用することができ、あなたはこれが起こることをしたくない場合は@&amp;

に変更見ていますそのURLがユーザーの入力からどのように生成されていないのかを確認してから、Html.Rawだけを使用してください。さらに、最初にURLを生成するのに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> 
関連する問題