Подтвердить что ты не робот

Передача массива ASP.NET ASP.NET в массив Javascript

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

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

int [] numbers = new int[5];

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

4b9b3361

Ответ 1

Вы можете использовать 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 для создания строки script, поскольку она, вероятно, будет длинной.

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

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

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

  • Некоторые считают, что это интрузивно для С# для ввода Javascript

  • Мы должны объявить массив в глобальном контексте

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

Ответ 2

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

фиктивный образец:

<% var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); %>
var jsVariable = <%= serializer.Serialize(array) %>;

Ответ 3

Это добавление ответа 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, используя свою любимую фреймворк.

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

Ответ 4

В файле страницы:

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

а в коде позади:

public int[] numbers = WhatEverGetTheArray();

Ответ 5

Для массива объектов:

var array= JSON.parse('@Newtonsoft.Json.JsonConvert.SerializeObject(numbers)'.replace(/&quot;/g, "\""));

Для массива int:

 var array= JSON.parse('@Newtonsoft.Json.JsonConvert.SerializeObject(numbers)');

Ответ 6

Подготовьте массив (в моем случае это массив 2d):

        // prepare a 2d array in c#
        ArrayList header = new ArrayList { "Task Name", "Hours"};
        ArrayList data1 = new ArrayList {"Work", 2};
        ArrayList data2 = new ArrayList { "Eat", 2 };
        ArrayList data3 = new ArrayList { "Sleep", 2 };
        ArrayList data = new ArrayList {header, data1, data2, data3};
        // convert it in json
        string dataStr = JsonConvert.SerializeObject(data, Formatting.None);
        // store it in viewdata/ viewbag
        ViewBag.Data = new HtmlString(dataStr);   

Разберите его в представлении.

<script>    
    var data = JSON.parse('@ViewBag.Data');
    console.log(data);
</script>

В вашем случае вы можете напрямую использовать имя переменной вместо ViewBag.Data.

Ответ 7

Я столкнулся с подобной ситуацией, и я спокойно ее разрешил. Вот что я сделал. Предполагая, что у вас уже есть значение в массиве на странице aspx.cs.

1) Поместите скрытое поле на страницу aspx и нам скрытый идентификатор поля, чтобы сохранить значение массива.

 HiddenField2.Value = string.Join(",", myarray);

2) Теперь, когда скрытое поле имеет сохраненное значение, просто разделяется запятыми. Используйте это скрытое поле в JavaScript, как это. Просто создайте массив в JavaScript, а затем сохраните значение в этом массиве, удалив запятые.

var hiddenfield2 = new Array();
hiddenfield2=document.getElementById('<%=HiddenField2.ClientID%>').value.split(',');

Это должно решить вашу проблему.