2009-04-02 2 views
0

Я показываю модальный диалог через «window.showModalDialog (...», который происходит в функции vbscript (указанная страница - aspx). Я хотел бы сделать некоторое изменение размера окна в зависимости от количества строк в возвращаемом datatable, поэтому, естественно, я перехожу к регистрации сценария запуска, который меняет размер окна на основе количества строк. Ну, это не сработало, поэтому я попытался зарегистрировать скрипт, который только что показал msgbox.does showModalDialog вмешивается в ClientScript.RegisterStartupScript?

код выглядит (в обработчике события OnLoad):

if (!this.ClientScript.IsStartupScriptRegistered(typeof(MyPageClassName), "hello")) 
     { 
      this.ClientScript.RegisterStartupScript(typeof(MyPageClassName), "hello", 
        @"<script language=vbscript> 
         sub fnWindowOnLoad() 
          MsgBox ""hello"" 
         end sub 
         <script>", false); 
     } 
     if (!this.ClientScript.IsStartupScriptRegistered(typeof(MyPageClassName), "hello")) 
     { 
      throw new Exception("Failed to load script"); 
     } 

Для меня это выглядит как это должно работать и показать окно с сообщением, что говорит «привет» при загрузке страницы (у меня есть функция окна событие onload установлено в fnWindowOnL ДОА). Но то, что происходит, ничто, ни исключения, ни предупреждения. Я пробовал каждый тип, о котором я мог думать в вызове typeof. Ничто не работает. Единственное, о чем я могу думать, это то, что, поскольку диалог является модальным ClientScript.RegisterStartupScript не будет работать должным образом. Но это не имеет никакого смысла для меня.

Я положил вызов «привет» MsgBox в свой блок сценариев напрямую, и появилось предупреждение, так что это возможно. Но мне нужно изменить некоторые аргументы в коде, так что я должен использовать RegisterStartupScript, насколько я могу судить.

ответ

0

Решение для этого было иметь скрипт, который считывал значение из скрытого поля, а затем изменял размер диалогового окна. Значение было установлено на странице_Load. Использование RegisterStartupScript никогда не работало, также не было RegisterClientScript, поэтому я уверен, что модальный диалог и RegisterXxx не ладят. Необходимо использовать window.dialogHeight & window.dialogWidth в vbscript.

0

Вы пытались открыть окно через window.open(), а не window.showModalDialog()? Я видел некоторые публикации в Интернете о несовместимости между showModalDialog() и RegisterStartupScript.

showModalDialog() - это только метод IE, поэтому он не рекомендуется в любом случае. Я знаю, что это удобно, потому что оно возвращает значение, но существуют различные способы имитации этой функции.

Редактировать: Другая проблема с showModalDialog() заключается в том, что IE часто кэширует результаты. Это означает, что если один раз вы вызываете диалог, вы не изменяете его размер, тогда в другой раз, когда вы делаете, то второй раз может получить ваш первый кешированный диалог. Способ обойти это состоит в том, чтобы добавить уникальную строку запроса в конце. Как MyDialog.aspx? Q = 320934 (произвольно сгенерированный или сгенерированный на основе тиков сервера).

+0

мой босс не будет счастлив, если я избавлюсь от showModalDialog; плюс это связано с множеством других изменений; Мне действительно нужна ценность, которая возвращается; мы являемся компанией только для IE и останемся так годами, я подозреваю – jcollum

+0

@jcollum См. мое редактирование выше. Это другая проблема, которую я видел. – Keltex

+0

вздох, ты прав. но если я начну исправлять вещи правильным образом здесь, мне придется начинать с нуля, и у меня нет участия в mgmt на этом – jcollum

Смежные вопросы