Как предоставить данные переменных JavaScript из переменных ASP.NET?
Я создал SCORM API для нашей LMS, и сейчас я использую жестко кодированные идентификаторы userID и courseID (переменные, которые ссылаются на вещи в базе данных). Мне нужно передать реальный идентификатор пользователя и идентификатор курса вместо использования жестко закодированных. Я знаю, что идентификатор пользователя хранится в сеансе, а идентификатор курса передается со стартовой страницы.
Как получить их в JavaScript, чтобы я мог включить их в свои вызовы .ashx, который обрабатывает вызовы SCORM?
Ответы
Ответ 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.