Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > .NET: Web приложения > Как проверить пароль


Автор: Budda 11.11.07, 14:32
Делаю форму регистрации:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
            <tr>
                <td align="right">Пароль:</td>
                <td><asp:TextBox id="txtPasswd" runat="server" TextMode="Password" OnTextChanged="txtPasswd_TextChanged" AutoPostBack="true"/>*</td>
                <td>
                </td>
            </tr>
            <tr>
                <td align="right">Подтверждение пароля:</td>
                <td><asp:TextBox ID="txtPasswd2" runat="server" AutoPostBack="true" OnTextChanged="txtPasswd_TextChanged"
                        TextMode="Password">
                    </asp:TextBox>*</td>
                <td>
                    <asp:Label ID="lblPasswordCheck" runat="server"></asp:Label>                
                </td>
            </tr>

Положил это дело внутрь UpdatePanel (использую http://asp.net/ajax), написал обработчик
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
        protected void txtPasswd_TextChanged(object sender, EventArgs e)
        {
            if( txtPasswd.Text.Length != 0 && txtPasswd2.Text.Length!=0 )
            {
                if( txtPasswd.Text == txtPasswd2.Text )
                {
                    lblPasswordCheck.Text = "";
                } else
                {
                    lblPasswordCheck.Text = "Подтверждение не соответствует паролю";
                }
            }
        }

Но вот беда: поскольку режим TextBox'ов - TextMode="Password", то поля паролей очищаются...

Получается, что для проверки введённых паролей без перезагрузки нужно использовать либо чистый JavaSript, либо CustomValidator (с использованием той же JavaScript'овой функции?

Добавлено
... но если делать на чистом ява скрипт, надо знать ИД полей, ведь txtPasswd и txtPasswd2 имеют runat="server"... и их ИД после обработки сервером изменятся...

Подскажите, плиз, что же делать? Как же быть?

Добавлено
Цитата Budda @
... но если делать на чистом ява скрипт, надо знать ИД полей, ведь txtPasswd и txtPasswd2 имеют runat="server"... и их ИД после обработки сервером изменятся...


Когда-то Flex Ferrum говорил, что можно получать элемент с использованием функций аяксовых скриптов:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    var txtP1 = $get('txtPasswd');

буду пробовать...

Добавлено
Во.. как вариант, можно вытащить поля паролей из UpdatePanel... верно?

Добавлено
Но, всё таки, проверки, которые могут быть сделаны простыми средствами на клиенте, должны там и выполняться, верно? :)

Автор: Mr_Smith 12.11.07, 08:48
Цитата

... но если делать на чистом ява скрипт, надо знать ИД полей, ведь txtPasswd и txtPasswd2 имеют runat="server"... и их ИД после обработки сервером изменятся...

попробуй найти через Page.ClientID

Автор: Budda 12.11.07, 10:31
Цитата Mr_Smith @
попробуй найти через Page.ClientID

Насколько я понимаю, пробовать ты предлагаешь на сервере. А на сервере и пробовать ничего не нужно: txtPasswd.Text - вот и попробовал.

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

Вот, что получилось (если кому-то интересно):
http://vfm-elita.com/register - если кто подскажет чё-нить интересное (идею повышения юзабилити или качества кода), буду благодарен.

Правда мне надо оптимизировать сначала клиентский код самой странички, а то уж больно много в ней мусора...

Добавлено
кхм, кстати, вот только заметил, что первое обращение при проверке логина выдаёт ошибку... и проявляется только один раз, может кто-то сделает скриншот, чего оно там ругается?

Автор: Flex Ferrum 12.11.07, 10:35
Кстати, а зачем тебе вообще регистрация на аяксе потребовалась? И автопостбак на поле с паролем?

Автор: Budda 12.11.07, 11:13
Цитата Flex Ferrum @
Кстати, а зачем тебе вообще регистрация на аяксе потребовалась? И автопостбак на поле с паролем?

1. проверка, используется ли логин, под которым юзер пытается зарегистрироваться. Это я вынес на отдельную страничку, там где нет пароля... всё ок, кроме того
Цитата Budda @
, что первое обращение при проверке логина выдаёт ошибку... и проявляется только один раз, может кто-то сделает скриншот, чего оно там ругается?

2. Хотелось бы также сразу проверять совпадает ли пароль введённый в поля "Пароль" и "Подтверждение пароля". По зрелом размышлении понял, что это всё-таки лучше делать на клиенте...
3. А автопостбек на поле с паролем - ну а как же его ещё проверять? (если не опускаться до ручного написания JavaScript'ового кода)?

Автор: Mr_Smith 12.11.07, 11:24
делай скрипт на сервере динамически, потом регистрируй его и вызывай свою проверку. думаю никаких проблем тогда с идентификацией контролов не будет.

Автор: Budda 12.11.07, 11:45
Цитата Mr_Smith @
делай скрипт на сервере динамически

Ты понимаешь... влом мне ковыряться с ЖабаСкриптом... нелюблю я его... Но навреное придётся полюбить?

Цитата Mr_Smith @
потом регистрируй его и вызывай свою проверку. думаю никаких проблем тогда с идентификацией контролов не будет

ты хочешь сказать, что содержимое скрипта будет адаптировано под идентификаторы клиентских элементов? Сомневаюсь, думаю, что всё же надо делать $get...

Автор: Mr_Smith 13.11.07, 07:50
Цитата

ты хочешь сказать, что содержимое скрипта будет адаптировано под идентификаторы клиентских элементов?

Ага.

я сам Жабу не очень, но чтоб сделать валидацию на клиенте многих знаний думаю не надо. К тому же можно попросить знатоков из ветки явы посоветовать какой-нибудь скрипт. сам так делал, помогало ;-)

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)