Передать массив C # ASP.NET в массив Javascript

Кто-нибудь знает, как передать массив C # ASP.NET в массив JavaScript? Пример кода тоже подойдет.

Извините, если раньше я был расплывчатым, ребята. Вопрос на самом деле довольно прост. Скажем для простоты, что в моем файле aspx.cs я объявляю:

int [] numbers = new int[5];

Теперь я хочу передать числа на сторону клиента и использовать данные в массиве в JavaScript. Как мне это сделать?

36
задан SharpC 10 November 2015 в 12:51
поделиться

4 ответа

Вы можете использовать ClientScript.RegisterStartUpScript для вставки JavaScript на страницу в Page_Load.

Вот ссылка на ссылку MSDN: http://msdn.microsoft.com/en-us/library/asz8zsxy.aspx

Вот код в Page_Load:

  List<string> tempString = new List<string>();
  tempString.Add("Hello");
  tempString.Add("World");

  StringBuilder sb = new StringBuilder();
  sb.Append("<script>");
  sb.Append("var testArray = new Array;");
  foreach(string str in tempString)
  {
    sb.Append("testArray.push('" + str + "');");
  }
  sb.Append("</script>");

  ClientScript.RegisterStartupScript(this.GetType(), "TestArrayScript", sb.ToString());

Примечания: Используйте StringBuilder для создания строки сценария, поскольку она, вероятно, будет длинной.

А вот Javascript, который проверяет внедренный массив testArray, прежде чем вы сможете с ним работать:

if (testArray)
{
  // do something with testArray
}

Здесь есть 2 проблемы:

  1. Некоторые считают, что внедрение Javascript в C # навязчиво

  2. объявить массив в глобальном контексте

. Если вы не можете жить с этим, другим способом было бы, чтобы код C # сохранял массив в состояние просмотра, а затем заставлял JavaScript использовать PageMethods (или веб-службы) для обратного вызова на сервер, чтобы получить этот объект состояния просмотра в виде массива. Но я думаю, что для чего-то вроде этого это может быть излишним.

15
ответ дан 27 November 2019 в 05:16
поделиться

В файле подкачки:

<script type="text/javascript">
    var a = eval('[<% =string.Join(", ", numbers) %>]');
</script>

в то время как в коде позади:

public int[] numbers = WhatEverGetTheArray();
11
ответ дан 27 November 2019 в 05:16
поделиться

сериализовать его с помощью класса System.Web.Script.Serialization.JavaScriptSerializer и присвоить javascript var

dummy sample:

<% var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); %>
var jsVariable = <%= serializer.Serialize(array) %>;
56
ответ дан 27 November 2019 в 05:16
поделиться

Это дополняет ответ zerkms.

Чтобы передавать данные через языковые барьеры, вам понадобится способ представления данных в виде строки путем сериализации данных. Одним из методов сериализации для JavaScript является JSON.В примере с zerkms код будет помещен внутри страницы aspx. Чтобы объединить его и ваш пример на одной aspx-странице, у вас будет,

<%
    int[] numbers = new int[5];
    // Fill up numbers...

    var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
%>

где-нибудь позже на aspx-странице

<script type="text/javascript">
    var jsVariable = <%= serializer.Serialize(numbers) %>;
</script>

Однако этот ответ предполагает, что вы генерируете JavaScript из начальной загрузки страницы. Согласно комментариям в вашем сообщении, это можно было сделать через AJAX. В этом случае сервер должен ответить результатом сериализации, а затем десериализовать его в JavaScript, используя ваш любимый фреймворк.

Примечание: также не отмечайте это как ответ, так как я хотел, чтобы подсветка синтаксиса сделала другой ответ более понятным.

18
ответ дан 27 November 2019 в 05:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: