2010-04-12 4 views
0

Я использую следующий код в попытке показать диалоговое окно со списком ошибок на клиенте:RegisterClientScriptBlock код не выполняет

if (rollout.ImportErrors.Count > 0) 
    { 
     ClientScript.RegisterClientScriptBlock(GetType(), "showErrors", "showErrors();", true); 
    } 

Количество ошибок не равно нулю, и следующий блок скрипта но сценарий не выполняется.

<script type="text/javascript"> 
//<![CDATA[ 
$("#error-report").dialog("open")//]]> 
</script> 

Если я вызываю функцию непосредственно из окна консоли Firebug, диалог правильно показывает, так что я знаю, диалог и мой код работает. Что я делаю не так?

BTW, этот код находится на странице содержимого с использованием заполнителя содержимого, который «вводит» код в элемент отображаемой страницы.

ответ

3

Я думаю, вы должны попробовать RegisterStartupScriptBlock вместо RegisterClientScriptBlock ...

Заканчивать объяснение:

RegisterClientScriptBlock вставляет скрипт сразу после запуска тег тогда RegisterStartupScript тут же добавляет скрипт перед закрывающим тегом.

В IE HTML DOM создается серийно. Таким образом, ваша информация заголовка будет обработана сначала, когда будет создан ваш объект формы, будет проанализирован ваш регистр RegisterClientScript (и будет выполнен, если нет в функциональных блоках), ваши элементы управления, такие как текстовые поля и т. Д. В вашей форме, будут обработаны, и ваш регистрStartupScript будет проанализирован (и выполняется, если нет в функциональных блоках).

Итак, в IE по крайней мере вы гарантируете, что любые элементы формы будут существовать для ваших скриптов, если вы поместите код в RegisterStartupScript. И наоборот, вы в основном гарантируете, что для ваших скриптов в блоке RegisterClientScript не будут существовать какие-либо элементы формы, а код не находится в функциональных блоках.

+0

Примечание, это RegisterStartupScript; not RegisterStartupScriptBlock –

0

Вам нужно обернуть его в этом случае, как это:

$(function() { $("#error-report").dialog("open"); }); 

Это просто поместив его на странице, но DOM может еще не быть готовы (это когда вы запускаете его на консоли, поэтому он работает там). Подобно тому, как вы написали скрипт непосредственно на странице, оберните его, чтобы он не выполнялся до document.ready.

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