Сервер Asp.net контролирует тот же порядок обработки событий на стороне сервера/клиента

У меня есть элемент управления сервером asp.net (с asp: в его определении). Кнопка была настроена на обратную публикацию.

На стороне сервера у меня есть обработчик события клика, например, btnSave_click()

На стороне клиента у меня есть функция javascript, которая вызывается в событии щелчка, например, btnSave.Attributes.Add("onclick","javascript: return CheckIsDirty();")

Не уверен, какой приказ эти двое будут выполнять. Потому что я хочу сначала на стороне клиента предупредить о любых полях ввода данных, которые еще не заполнены, прежде чем фактически сохранять какие-либо данные.

Любая помощь?


person Julius A    schedule 15.10.2008    source источник


Ответы (4)


Первая клиентская сторона, вторая серверная.

Так что вы можете использовать его.

Я также использую его в некоторых случаях, например:

close.Attributes["OnClick"] = "return confirm('Are you sure?')";

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

person Biri    schedule 15.10.2008

Хитрость здесь заключается в том, чтобы установить эту глобальную переменную «Page_IsValid» в false, если ваш тест не пройден, и это остановит публикацию.

Прочтите эту страницу http://msdn.microsoft.com/en-us/library/aa479045.aspx, который объясняет проверку как на стороне сервера, так и на стороне клиента. Есть один хороший пример кода, который вы можете использовать.

person Pbearne    schedule 15.10.2008

То, как вы настраиваете событие JavaScript onClick, фактически предотвратит его отправку обратно, поскольку вы перезаписываете обработчик событий ASP.NET. Правильный способ выполнить проверку, которую вы намереваетесь, заключается в следующем:

btnSave.Attributes.Add("onclick", "CheckIsDirty();" + GetPostBackEventReference(btnSave).ToString());

Обратите внимание, что вы добавляете результат GetPostBackEventReference, так что в JavaScript вы сначала вызываете свой метод CheckIsDirty(), а затем вызываете метод обратной передачи ASP.NET. Предполагая, что ваш метод возвращает true, кнопка будет опубликована. Если он вернет false, то он не вызовет ответную публикацию.

Похоже ли это на то, чего вы пытаетесь достичь?

person Jason Whitehorn    schedule 15.10.2008

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

Конечно, в вашем случае клиентская сторона будет выполняться первой. На самом деле нет возможности выполнить его после выполнения кода сервера (кроме случаев, когда вы делаете что-то вручную). Попробую дать краткое объяснение:

Все, что у вас есть на вашем сервере, будет генерировать некоторый HTML на клиенте, и пользователь всегда взаимодействует с клиентом. Итак, у вас есть html-кнопка, которую нажимает пользователь. Что будет делать браузер, так это выполнять связанный с ним javascript или, если javascript не указан, а кнопка является кнопкой отправки, он отправит форму. если вы проверите сгенерированный html, вы увидите, что для события onclick у вас будет добавленный вами скрипт, за которым следует некоторый автоматически сгенерированный скрипт, который фактически отправит форму на сервер. Ваш код на стороне сервера будет выполняться только в том случае, если страница будет отправлена.

person Albert    schedule 15.10.2008