Смешивание JavaScript и встроенного кода сервера - PullRequest
1 голос
/ 31 января 2011

Я пытаюсь сделать следующее:

   <script>
      var documentId = %(this).attr('id');

      <% int docId = %>documentId<%;%>

   </script>

Как видите, я пытаюсь создать новую серверную переменную, но присваиваю значение переменной javascript. Или, по крайней мере, оценивать переменную javascript. (Это упрощенный пример проблемы реального мира, которую я пытаюсь решить) Есть ли способ, которым я могу это сделать?

Ответы [ 5 ]

4 голосов
/ 31 января 2011

Проблема:

  1. Серверный код оценивается на сервере, , прежде чем что-либо передается клиенту .
  2. Код на стороне клиента (JavaScript) оценивается в браузере после того, как сервер завершил передачу документа .

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

Что вам нужно будет сделать (если ваша цель - предотвратить обновление страницы), это отправить новые данные в сценарий на сервере с помощью AJAX.Скрипт обработает данные и ответит браузеру.

0 голосов
/ 31 января 2011

Для отправки данных из браузера на сервер вы должны использовать элементы управления формы (текстовое поле, скрытое поле, текстовое поле, флажок и т. Д.) Или ajax. В вашем случае вы можете сериализовать объект javascript в строку и передать его на сервер через скрытое поле или XmlHttpRequest.

0 голосов
/ 31 января 2011

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

Выполнение кода на стороне сервера => Сгенерированный файл HTML, подаваемый в браузер => Запуск кода Javascript

Этот процесс односторонний, поэтому невозможно вернуть эту переменную без использования Ajax-запроса.

Однако, если все, что вам нужно, это идентификатор, а элемент управления - это элемент управления .NET, вы можете просто использовать значение myControl.ClientID.

0 голосов
/ 31 января 2011

Поскольку код вашего сервера присваивает объекту @id, сервер должен знать об этом на момент создания.Но нет, вы не можете чередовать клиент и сервер таким образом - они работают раздельно по времени и географии

0 голосов
/ 31 января 2011

Код сервера будет обработан первым, прежде чем страница будет отображена. Поэтому вам придется использовать что-то вроде AJAX для передачи значения JavaScript обратно на сервер.

...