2013-05-15 2 views
1

В моем текущем проекте у меня есть рабочий процесс, в котором я должен показать пользователю два последовательных MessageBox. Первый из них скорее напоминает предупреждение, которое информирует пользователя о риске операции, которую он пытается выполнить. Я использую ClientClickEvent одной кнопки ссылки, чтобы позволить пользователю подтвердить операцию:Как WebForm_OnSubmit не определен?

<asp:LinkButton runat="server" id="lockorder" 
    CommandName='LockOrder' 
    OnClientClick="return confirm('Do you really want to lock this order?');" /> 

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

if (tasksOpen) 
{ 
    ScriptManager.RegisterClientScriptBlock(
     this.Page, 
     typeof(Page), 
     "Onload", 
     "var confirmationResult = window.confirm('There are some open tasks left, which might get closed. Do you really want to lock this order?'); if (confirmationResult) __doPostBack('ConfirmLockOrder', confirmationResult);", 
     true); 
    return; 
} 

Для лучшей читаемости здесь являюсь JS-фрагмент, который получит поднес к клиенту:

var confirmationResult 
    = window.confirm('There are some open tasks left, which might get closed. Do you really want to lock this order?'); 

if (confirmationResult) 
    __doPostBack('ConfirmLockOrder', confirmationResult); 

Назад снова в коде Я получаю эту команду (например, внутри события Page_Load) и продолжаю выполнять фактические операции. Все работало нормально, но с некоторыми изменениями я сделал это, прекратил выполнение обратной передачи.

Я ознакомился с клиентским скриптом, используя FireBug. Функция __doPostBack (которая, по-видимому, автоматически сгенерирована) сообщает мне, что WebForm_OnSubmit не определен. Я думаю, что это не определено, потому что диалог подтверждения get отображается в OnLoad -event и, таким образом, до того, как форма загружена. Но почему функция __doPostBack даже должна проверить, выполнялось ли это событие, если оно не определено? Могу ли я настроить __doPostBack -behaviour? Или я должен выбрать другое событие? Или я совершенно здесь не прав?

Надеюсь, кто-то может указать мне в правильном направлении!

+0

Ошибка в другом месте вашего JavaScript может привести к ошибке, как вы видели выше. Я бы сначала это проверял. Это может раздражать, чтобы найти проблему. –

+0

Ошибок JavaScript не возникало ... Я пытался избежать JavaScript почти везде, потому что я не знаком с ним ... – Carsten

+0

Хорошо, возможно, что ваш код работает до загрузки всего остального. Я не уверен в сроках ScriptManager для ввода кода. Однако вы можете изменить свой JavaScript на что-то вроде этого: window.onload = function() {[ваш код здесь]}; Если вы используете jQuery, лучше использовать метод .ready. –

ответ

2

Исходя из ошибки (и некоторых образованных догадок), код JavaScript, который вы регистрируете через ScriptManager, запускается до того, как загрузится весь код JavaScript, сгенерированный ASP.NET. Следовательно, WebForm_OnLoad не определено.

Вам необходимо убедиться, что веб-страница полностью загружена до выполнения вашего кода. Измените свой код к следующему:

window.onload=function(){ 
    var confirmationResult = window.confirm('There are some open tasks left, ' 
     + 'which might get closed. Do you really want to lock this order?'); 

    if (confirmationResult) 
     __doPostBack('ConfirmLockOrder', confirmationResult); 
} 

* Я сломал строку подтверждения на два, только для целей отображения.

Если вы используете jQuery, $(document).ready является предпочтительным по сравнению с window.onload.

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