Как передать данные переменных JavaScript из переменных ASP.NET? - PullRequest
24 голосов
/ 16 февраля 2009

Я создал SCORM API для нашей LMS и сейчас я использую жестко закодированные переменные userID и courseID (переменные, которые ссылаются на вещи в базе данных). Мне нужно передать реальный userID и courseID вместо использования жестко закодированных. Я знаю, что идентификатор пользователя хранится в сеансе, а идентификатор курса передается со страницы запуска.

Как мне включить их в JavaScript, чтобы я мог включить их в свои вызовы .ashx, который обрабатывает вызовы SCORM?

Ответы [ 9 ]

43 голосов
/ 16 февраля 2009

Вероятно лучше проще всего представить их как свойства вашей страницы (или главной страницы, если они используются на каждой странице) и ссылаться на них через директивы страницы.

 <script type="text/javascript">
     var userID = '<%= UserID %>';
     var courseID = '<%= CourseID %>';

     .... more stuff....
 </script>

Затем установите значения в Page_Load (или в Page_Load для главной страницы).

  public void Page_Load( object source, EventArgs e )
  {

        UserID = Session["userID"];
        CourseID = Session["courseID"];
        ...
  }
8 голосов
/ 02 января 2012

@ tvanfosson ответ - это то, как я обычно делал это в прошлом, но просто пытался придумать что-то более элегантное. Думал, я бы выбросил это туда.

Вы можете установить HashTable в коде, а также инициализировать JavaScriptSerializer:

Protected json As New System.Web.Script.Serialization.JavaScriptSerializer
Protected jsvars As New Hashtable

Затем установите переменные следующим образом:

jsvars.Add("name", "value")

Затем сериализуйте переменные в JavaScript на вашей странице:

<script type="text/javascript">
    var vars = <%=json.Serialize(jsvars)%>;
    alert(vars.name);
</script>

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

8 голосов
/ 16 февраля 2009

Все ответы здесь, которые предлагают что-то вроде

var userID = '<%= UserID %>';

все упускают что-то важное, если встроенная переменная может содержать произвольные строковые данные. Встроенные строковые данные необходимо экранировать, чтобы, если они содержат обратную косую черту, кавычки или непечатаемые символы, они не приводили к ошибке вашего JavaScript.

У Рика Строла есть несколько советов по поводу необходимого кода экранирования здесь . Используя код Рика, встроенная переменная будет выглядеть так:

var userId = <%= EncodeJsString(UserID) %>;

Обратите внимание, что кавычек теперь нет, код Рика обернул экранированную строку кавычками.

5 голосов
/ 16 февраля 2009

Эта статья описывает самое прагматичное решение несколько прагматических решений вашей проблемы.

4 голосов
/ 16 февраля 2009

Вот шаги, которые вам придется предпринять:

В вашем коде за страницей:

private int _userId;
private int _courseId;
protected int CourseId
{
  get { return _courseId;}
  set { _courseId = value;}
}
protected int UserId
{
 get { return _userId;}

set { _userId = value;}
}

Шаг 2: теперь в зависимости от ваших требований вы должны настроить эти свойства. Загвоздка в том, что эти свойства должны быть установлены до ссылки на них из JavaScript. Может быть, что-то вроде этого в событии Page_Load:

_userId = Session["userId"];
_courseId = Request.QueryString["CourseId"] != null ? Request.QueryString["CourseId"] : String.empty;

Конечно, вы можете анализировать их в соответствии с вашими требованиями.

Наконец, вы можете ссылаться на них в JavaScript следующим образом:

var currentUserId = '<% = UserId %>';
var currentCouseId = '<% = CourseId %>';

Это определенно должно работать. Я использовал этот подход много раз.

2 голосов
/ 16 ноября 2014

В Передача данных .NET на сервер в JavaScript , я перечисляю различные подходы, в том числе:

  1. Выборка данных с помощью запроса AJAX
  2. Загрузка данных через внешний файл JavaScript
  3. Открытие постоянного соединения с SignalR
  4. Присоединение данных к элементам HTML
  5. Присвоение данных непосредственно переменной JavaScript
  6. Сериализация объекта .NET в литерал JavaScript
0 голосов
/ 19 августа 2009

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

0 голосов
/ 16 февраля 2009

Вы также можете использовать HTTP-куки. Этот подход хорош, если вам нужно передать значения и в другом направлении.

0 голосов
/ 16 февраля 2009

Я не уверен насчет файлов SCORM или .ashx (там нет опыта), но что касается получения значений из ASP.NET, вы можете делать все что угодно, например,

var xyz = '<%= variable %>';

из вашей страницы ASP.NET. Есть несколько способов сделать это, но конечный результат заключается в том, что страница ASP.NET отображает значения переменной в HTML (или JavaScript), который отправляется в браузер.

Это общий ответ ASP.NET и JavaScript, возможно, для вас найдется более элегантное решение.

...