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

Как предоставить данные переменных JavaScript из переменных ASP.NET?

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

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

4b9b3361

Ответ 1

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

 <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"];
        ...
  }

Ответ 2

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

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

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

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

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

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

Ответ 3

ответ @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>

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

Ответ 4

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

Ответ 5

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

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

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 %>';

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

Ответ 6

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

  • Получение данных с помощью запроса AJAX
  • Загрузка данных через внешний файл JavaScript
  • Открытие постоянного соединения с SignalR
  • Присоединение данных к элементам HTML
  • Прямая привязка данных к переменной JavaScript
  • Сериализация объекта .NET в литературе JavaScript

Ответ 7

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

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

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

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

Ответ 8

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

Ответ 9

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