Как создать строку javascript в бритве
Я видел несколько сообщений по этой теме и несколько блогов, но ни один из них не упоминает вывод, который я получаю.
Я хочу создать карту карт google с информацией об этом. Вручную ввод информации приводит к правильной информации. Так что эта часть работает.
Где я застреваю, когда я собираюсь динамически создать массив 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>
Сброс одиночных кавычек не работает.
Что я делаю неправильно?
Ответы
Ответ 1
Просто попробовал с помощью
<script type="text/javascript">
var projects = [
@Html.Raw("['" + "aaa" + "', " + "bbb" + "'],")
];
</script>
он работал и показывал...
<script type="text/javascript">
var projects = [
['aaa', bbb'],
];
</script>
Ответ 2
Вы не хотите вызывать 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>
Ответ 3
Я считаю, что вы могли бы сделать большую часть тяжелого подъема в .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(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>