ASP.Net PostbackURL не работает, если я использую проверку Javascript

У меня есть пользовательский элемент управления в ASP.Net с кнопкой, которую я использую для обратной передачи. Эта кнопка также имеет некоторую проверку Javascript, которая выполняется перед обработкой события.

Сегодня я попытался выполнить обратную передачу на другой URL-адрес, установив свойство PostBackURL кнопки. Но это не сработало, и страница продолжала отправлять сообщения сама себе. Итак, я провел небольшое расследование и нашел это.

  1. Отправка на другой URL-адрес реализована через Javascript в ASP.Net.
  2. Если я сохраню вызов своей функции проверки

    OnClientClick = "return validate ()" Тогда возврат сообщения не происходит.

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

Так выглядит разметка кнопки с включенной проверкой.

<input type="submit" name="ctl00$cphMain$pra1$btnSubmit" value="Submit" onclick="return validate();WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$cphMain$pra1$btnSubmit&quot;, &quot;&quot;, false, &quot;&quot;, &quot;Result.aspx&quot;, false, false))" id="ctl00_cphMain_pra1_btnSubmit" style="width:80px;" />

Без проверки

<input type="submit" name="ctl00$cphMain$pra1$btnSubmit" value="Submit" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$cphMain$pra1$btnSubmit&quot;, &quot;&quot;, false, &quot;&quot;, &quot;Result.aspx&quot;, false, false))" id="ctl00_cphMain_pra1_btnSubmit" style="width:80px;" />

Вы заметите, что отсутствует вызов return validate (), и в этом вся разница.

Как я могу заставить это работать?


person Cyril Gupta    schedule 20.07.2009    source источник


Ответы (2)


это потому, что return предотвращает выполнение WebForm_DoPostBackWithOptions, независимо от результата проверки.

вы можете попробовать (без кавычек):

"!validate() ? return false : "

таким образом это закончится как:

!validate() ? return false : WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$cphMain$pra1$btnSubmit&quot;, &quot;&quot;, false, &quot;&quot;, &quot;Result.aspx&quot;, false, false))

грубый взлом, но это веб-формы для вас, один большой взлом поверх другого.

person Andrew Bullock    schedule 20.07.2009
comment
Я бы предпочел код javascript, который работал бы автономно. Немного меньше хака, поскольку он не полагается на какие-либо предположения о том, как он используется. - person tvanfosson; 20.07.2009
comment
Правильно! Спасибо за решение. - person Cyril Gupta; 20.07.2009

Заменять

OnClientClick="return validate();" 

с участием

OnClientClick="if (!validate()) { return false; }"
person tvanfosson    schedule 20.07.2009
comment
согласился, это более изящное решение. - person Andrew Bullock; 20.07.2009