Передача значений переменных из C# в JavaScript

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

У меня есть приложение ASP.NET (на стороне сервера), и я хотел бы визуализировать некоторые результаты с помощью WebGL (JavaScript, на стороне клиента). Я могу создать холст в aspx-файле и нарисовать 3D-объект (куб), написав ВСЕ необходимый код JS в jscript-файле (если я знаю, что хочу нарисовать заранее, и записать все это в Jscript). Однако я намерен написать другой объект в зависимости от моего серверного кода. Когда я нажимаю кнопку визуализации, запускается обратная передача. На сервере выполняется некоторый код, а некоторые координаты возвращаются в массив, определенный глобально в файле aspx.cs. Мне нужно было бы передать этот массив координат узла с сервера в файл JS, чтобы нарисовать объект, который я хочу.

Вот в основном то, что я пробовал:

  • Я нашел самый простой способ передать переменную - объявить свойство public в aspx.cs (код C#), а затем в JS: var clientVariable = '<%=ServerVariable%>';

Я пробовал это не с массивом, а только с строковой переменной и если пишу: alert(clientVariable);Я вижу "<% = ServerVariable%>" в окне, а не фактическое значение. Я не знаю, нужна ли мне дополнительная библиотека или что-то в этом роде. Если я не смогу заставить этот простой пример работать, я не знаю, как бы я это сделал с двойным массивом. Я использую MCVS08, ASP.NET 3.5 с HTML5.

  • Кроме того, я попытался преобразовать массив не с помощью JSON, а с помощью: Page.ClientScript.RegisterArrayDeclaration();

  • Я использовал ClientScript.RegisterStartupScript(GetType(), "alert", "test2('" + A + "');", true);

  • Я пытался использовать скрытый блок для хранения значения сеанса и т. Д.

Итак, подводя итоги, я бы хотел получить:

  • на стороне сервера: после выполнения функции кода на сервере, при повторном рендеринге страницы у меня будет глобальная переменная в aspx.cs, представляющая собой двойные [,] координаты, содержащие координаты узлов, которые будут определять 3D объект.

  • aspx: в html (не asp.net) у меня есть тег canvas, в котором я хочу иметь визуализацию. Сценарий, который будет отображать изображение на стороне клиента, хранится в файле JScript. В этом файле внутри функции у меня есть переменная var vertices = []; который мне нужно кормить со значениями, которые я получил от сервера в массиве координат. Я не знаю, как добиться этого наилучшим способом. Вы бы порекомендовали использовать AJAX?

Любое предложение / комментарий будет очень признателен. Поскольку фиктивный пример с простой строкой не работает (забывая про canvas, webGL и все такое), могу ли я что-то еще сделать или я неправильно понимаю, как это сделать правильно?

2 ответа

Решение

Когда мне нужно передать переменные в JavaScript, я обычно предпочитаю var clientVariable = '<%=ServerVariable%>'; решение. Этот метод достаточен для небольшого числа скалярных переменных. Если вам нужно передать сложный объект или массив, рассмотрите возможность использования JavaScriptSerizlizer,

Такое поведение может происходить по ряду причин. Один из них может произойти, если вы включили скриптлет в .js файл, а не в .aspx файл.

Вот как я бы это сделал:

WebGL-ничья-file.js:

window.WebGlDraw = function(points /* point array */)
{
  // Draw points here
}

Page1.aspx.cs:

public string GetSerializedServerVariable()
{
    new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(ServerVariable);    
}

Page1.aspx:

<html>
<header>
    <script src="webgl-draw-file.js"/>
    <script type=text/javascript>
        window.WebGlDraw(<%=this.GetSerializedServerVariable()%>);
    </script>
</header>
<body>
...
</body>
</html>

Чтобы лучше понять, какие значения передаются в функцию JS, взгляните на источник страницы с помощью браузера. Вы должны увидеть JSON-представление вашего массива вместо <%=Page.GetSerializedServerVariable()%> скриптлет.

Это должно выглядеть примерно так:

<html>
<header>
    <script src="webgl-draw-file.js"/>
    <script type=text/javascript>
        window.WebGlDraw([{x:1, y:2}, {x:1, y:2}, {x:1, y:2}, {x:1, y:2}]);
    </script>
</header>
<body>
...
</body>
</html>

Можете ли вы сериализовать данные следующим образом:

<% var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); %>
var doublearr = <%= serializer.Serialize(ServerVariable) %>;
Другие вопросы по тегам