Почему эта переменная javascript, которую я создаю через C#, обновляется только один раз?

В моем коде C# для приложения ASP.Net у меня установлена ​​переменная, а затем я хочу установить переменную Javascript, равную ей, чтобы я мог поработать с ней на стороне клиента. Эта переменная C# устанавливается в обработчике событий и довольно часто меняется.

Итак, мой обработчик событий делает только это...

int scale = (int)myObject.Scale;
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "JSVariables", "scale=" + scale, true);  

Тогда у меня в JS есть обработчик событий, просто предупреждающий значение.

alert(scale);

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

Как я могу получить это значение, чтобы не быть постоянным? Каждый раз, когда достигается строка RegisterClientScriptBlock, в мою переменную масштаба JS должно загружаться новое значение, но оно остается таким же, каким оно было изначально. Есть идеи?

2 ответа

Решение

RegisterClientScriptBlock регистрирует ваш скрипт по типу (this.GetType()) и ключ ("JSVariables"). В следующий раз, когда RegisterClientScriptBlock будет вызван в том же стеке выполнения, он проверит, был ли зарегистрирован сценарий для этого типа и ключа, и если это так, он ничего не сделает.

Цель этого состоит в том, чтобы устранить дубликаты общих сценариев. Если все пять ваших элементов управления используют общий JavaScript-код, вы можете включить его только один раз на странице. Таким образом, все элементы управления могут вызывать одну и ту же функцию включения и клавишу и гарантировать, что она не будет включена несколько раз.

В дополнение к тому, что сказал Рекс, если вы используете ASP.NET Ajax, вам нужно будет использовать методы RegisterClientScript в ScriptManager, если вы хотите обновить эти значения между частичными обратными передачами, что похоже на то, что вы делаете.

Другие вопросы по тегам