如何在razor中创建javascript字符串

How to create a javascript string in razor

本文关键字:创建 javascript 字符串 razor      更新时间:2023-09-26

我看到了一些关于这个主题的帖子和一些博客,但似乎没有提到我得到的结果。

我想要的是生成一个带有信息的谷歌地图。手动输入信息会得到正确的信息。所以这部分是有效的。

我遇到的问题是,当我要动态地创建带有字符串的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>

跳过单引号是行不通的。我做错了什么?

刚刚试用

 <script type="text/javascript">
 var projects = [
   @Html.Raw("['" + "aaa" + "', '" + "bbb" + "'],")

 ];
 </script>

它发挥了作用并显示。。。

<script type="text/javascript">
var projects = [
       ['aaa', 'bbb'],

];
</script>

您不想对整个字符串调用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>

我相信你可以在.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>

既然在这个问题中已经提到了,HttpUtilityJavaScriptStringEncode()对于包含换行符的字符串来说真的很方便:

@{ 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>