powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / ASP.NET, Atlas, моё решение проблемы ...
1 сообщений из 1, страница 1 из 1
ASP.NET, Atlas, моё решение проблемы ...
    #33852240
Darkman_VLT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Была поставлена задача валидить форму и при этом не только блокировать 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
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / ASP.NET, Atlas, моё решение проблемы ...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]