18

このトピックに関するいくつかの投稿といくつかのブログを見ましたが、私が得ている出力について言及しているものはないようです。

私が欲しいのは、その情報を含むグーグルマップマップを生成することです。情報を手動で入力すると、正しい情報が得られます。その部分が機能します。

私が行き詰まっているのは、マップ上に必要な情報を含む文字列を使用してjavascript配列を動的に作成しようとしているときです。

取得したいhtmlコードは次のとおりです。

<script type="text/javascript">     
    var projects = [
         ['Kantoor 4.1 bestaande bouw', 52.25446, 6.16024700000003, 'Deventer', '', 'adviseurs', 'rating30'],
         ['School nieuw 4.0', 52.243161, 4.43677860000003, 'Noordwijk', '', 'adviseurs', 'rating30'],   
    ];

私が作成しようと思った非常に単純なjavascript配列:

<script type="text/javascript">
var projects = [
    @foreach (var item in Model)
    {
        @HttpUtility.JavaScriptStringEncode("['" + item.Gebouwnaam + "', " + item.LocatieLatitude.ToString().Replace(",", ".") + ", " + item.LocatieLongitude.ToString().Replace(",", ".") + ", '" + item.Plaats + "', '" + item.Gebruiksfunctie + "', '" + item.Licentiehouder + "', '" + item.rating + "'],");
     }
];
</script>

しかし、これは私に与えます:

<script type="text/javascript">
var projects = [
    [\u0027Kantoor 4.1 bestaande bouw\u0027, 52.25446, 6.16024700000003, \u0027Deventer\u0027, \u0027\u0027, \u0027adviseurs\u0027, \u0027rating30\u0027],
    [\u0027School nieuw 4.0\u0027, 52.243161, 4.43677860000003, \u0027Noordwijk\u0027, \u0027\u0027, \u0027adviseurs\u0027, \u0027rating30\u0027],
];  
</script>

一重引用符をエスケープしても機能しません。私は何が間違っているのですか?

4

3 に答える 3

17

試してみました

 <script type="text/javascript">
 var projects = [

   @Html.Raw("['" + "aaa" + "', '" + "bbb" + "'],")


 ];
 </script>

それは機能し、示しました...

<script type="text/javascript">
var projects = [

       ['aaa', 'bbb'],


];
</script>
于 2012-07-12T10:35:00.633 に答える
11

文字列全体でJavaScriptStringEncodeを呼び出さないでください。これにより、リテラルインジケーター(例では\ u0027に変換されます)もエンコードされます。代わりに、次のように配列内の各アイテムで呼び出します。

<script type="text/javascript">
var projects = [
    @foreach (var item in Model)
    {
        String.Format("['{0}',{1},{2},'{3}','{4}','{5}','{6}']",
                      HttpUtility.JavaScriptStringEncode(item.Gebouwnaam),
                      HttpUtility.JavaScriptStringEncode(item.LocatieLatitude.ToString().Replace(",", ".")),
                      HttpUtility.JavaScriptStringEncode(item.LocatieLongitude.ToString().Replace(",", ".")),
                      HttpUtility.JavaScriptStringEncode(item.Plaats),
                      HttpUtility.JavaScriptStringEncode(item.Gebruiksfunctie),
                      HttpUtility.JavaScriptStringEncode(item.Licentiehouder),
                      HttpUtility.JavaScriptStringEncode(item.rating)
         )
     }
];
</script>
于 2012-07-12T10:46:53.023 に答える
2

.netで手間のかかる作業のほとんどを実行し、Html.Rawを活用してオブジェクトを変換できると思います。

@{
    var myObj = Model.Select(i => new {
        item.Gebouwnaam,
        item.LocatieLatitude.ToString().Replace(",", "."),
        item.LocatieLongitude.ToString().Replace(",", "."),
        item.Plaats,
        item.Gebruiksfunctie,
        item.Licentiehouder,
        item.rating }).ToArray();
}

<script type="text/javascript">
    var jsObj = @Html.Raw(Json.Encode(myObj));
</script>

この質問で触れているので、HttpUtility.JavaScriptStringEncode()は、改行文字を含む文字列に非常に便利です。

@{ var myNetString = "Hi,\r\nMy name is Joe\r\nAnd I work in a button factory"; }

<script type='text/javascript'>
    var myJsString = '@HttpUtility.JavaScriptStringEncode(myNetString)';
</script>
于 2015-06-05T22:58:21.953 に答える