Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
ASP.NET, Atlas, моё решение проблемы ...
|
|||
|---|---|---|---|
|
#18+
Была поставлена задача валидить форму и при этом не только блокировать postback, а и выключать кнопку Submit Решил это пока только с помощью Atlas'a в случае отсутствия JS у клиента — не знаю, как реализовать. Имеем: Два TextBox'a: TextBox1 & TextBox2 А так же Button: Button1 Пришем xml-script, как того требует Atlas <script type="text/xml-script"> <page xmlns:script="http://schemas.microsoft.com/xml-script/2005"> <references> </references> <components> <textBox id="TextBox1"> <validators> <requiredFieldValidator /> </validators> <behaviors> <keyUpBehavior keyup="ValidateOnKeyUp" /> </behaviors> </textBox> <textBox id="TextBox2"> <validators> <requiredFieldValidator /> </validators> <behaviors> <keyUpBehavior keyup="ValidateOnKeyUp" /> </behaviors> </textBox> <button id="Button1"> <bindings> <binding dataContext="formGroup" dataPath="isValid" property="enabled" /> </bindings> </button> <validationGroup id="formGroup"> <associatedControls> <reference component="TextBox1" /> <reference component="TextBox2" /> </associatedControls> </validationGroup> </components> </page> </script> В данном случае, мы требуем только наличие данных в TextBox'aх, но можно валидить как нравится. Для того, что бы вылидить не только на OnChange, а на OnKeyUP — придумал только написать сообственный behavior: keyUpBehavior Вот код: // A behavior to handle the keyup event. Type.registerNamespace('Yani'); Yani.KeyUpBehavior = function() { Yani.KeyUpBehavior.initializeBase(this); // Private members. var _keyupHandler; // Events. this.keyup = this.createEvent(); // Initialize / Dispose. this.initialize = function() { Yani.KeyUpBehavior.callBaseMethod(this, 'initialize'); _keyupHandler = Function.createDelegate(this, keyupHandler); this.control.element.attachEvent('onkeyup', _keyupHandler); } this.dispose = function() { this.control.element.detachEvent('onkeyup', _keyupHandler); _keyupHandler = null; Yani.KeyUpBehavior.callBaseMethod(this, 'dispose'); } // Descriptor. this.getDescriptor = function() { var td = Yani.KeyUpBehavior.callBaseMethod(this, 'getDescriptor'); td.addEvent('keyup', true); return td; } // Event Handler. function keyupHandler() { //debug.trace(event.keyCode); this.keyup.invoke(this, Sys.EventArgs.Empty); } } Yani.KeyUpBehavior.registerClass('Yani.KeyUpBehavior', Sys.UI.Behavior); Sys.TypeDescriptor.addType('script', 'keyUpBehavior', Yani.KeyUpBehavior); В итоге получил то, что мне нужно, но вот как вызвать валидацию в момент OnKeyUP — было не понятно. Воспользовавшить .NET Reflector'ом и прочитав .js Atlas'a стало понятно, что валидаторы подписываются на сообытие: PropertyChanged и свойство text Получилось вот что: function ValidateOnKeyUp(sender, eventArgs) { sender.control.raisePropertyChanged('text'); } Получилось то, что нужно. Но, что-то мне подсказывает, что как-то оно кривава-то. Как это можно сделать по-другому? Особенно интерисует валидация, если JS отключен, как быть в данном случае? Понятно, что ни чего выключатся не будет. В идеальном случае, хотелось бы вылидить именно Atlas'ом — удобно кодить, а вслучае не возможности поддержки JS на стороне клиента — postback ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 18:51 |
|
||
|
|

start [/forum/topic.php?fid=18&fpage=933&tid=1391737]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
24ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
18ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 290ms |

| 0 / 0 |
