валидация на стороне сервера extjs4, как? - PullRequest
0 голосов
/ 27 октября 2011

У меня есть форма в extjs, и мне нужно выполнить некоторые проверочные тесты на ней на стороне сервера и вернуть сообщение об ошибке, но я понятия не имею, как это сделать!

Мне нужно проверить, если новыйдобавленный IP-адрес уже существует

Мне также нужно проверить, действительно ли это действительный адрес (у меня есть функция ac #, которая может это сделать)

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

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

edit это то, что я пытаюсь сделать до сих пор

моя форма отправляет:

this.up('form').getForm().submit
({
    url: 'AddData.ashx',
    params: { action: 'addip' },
    success: function (form, action) {
        Ext.MessageBox.show({ title: 'Success !',
            msg: 'IP added successfully<br />',
            icon: Ext.MessageBox.INFO,
            buttons: Ext.MessageBox.OK
        });

        Ext.getCmp('addipform').getForm().reset();
    },
    failure: function (form, action) {
        switch (action.failureType) {
            case Ext.form.action.Action.CLIENT_INVALID:
                Ext.Msg.alert('Failure', 'Form fields may not be submitted with invalid values');
                break;
            case Ext.form.action.Action.CONNECT_FAILURE:
                Ext.Msg.alert('Failure', 'Ajax communication failed');
                break;
            case Ext.form.action.Action.SERVER_INVALID:
                Ext.Msg.alert('Failure', action.result.msg);
        }
    }
})

внутри моего AddData.ashx есть функция addip (), которая вызывается, когда параметром действия является 'addip', эта функция возвращает:

public string addip()
{
   //my queries ...
   string result = new JavaScriptSerializer().Serialize("{    success:false,  errors:{    text:\"The IP already exist!\",  ip:\"The is not an IP !\"  }  }");
   return result;
}

но ничего не происходит!

Ответы [ 2 ]

1 голос
/ 27 октября 2011

Прежде чем вы его запустите, убедитесь, что у вас уже есть страницы, которые могут обслуживать запросы, подобные этим вызовам:

Request: http://localhost/verify.aspx?ip=192.168.0.1
Response: {success: true, message: "The IP is correct"} //you can pass as much items as you want here

Request: http://localhost/verify.aspx?ip=127.0.0.1
Response: {success: false, message: "The IP is already exist!"}

Звучит просто, верно?

Тогда в вашем ExtJS вы можете иметь такой код (простите, если есть какая-либо синтаксическая ошибка, пока не тестируйте ее)

var w = Ext.create('Ext.window.Window', {
    width: 300,
    height: 250,
    items: Ext.create('Ext.form.Panel', {
        items: [{
            xtype: 'textfield',
            fieldLabel: 'IP'
        }]
    }),
    buttons: [{
        text: 'Save',
        handler: function() {
            var ip = w.down('textfield').getValue();

            //Some client side validation first
            //then we submit it

            //Use Ajax request          
            Ext.Ajax.request({
                url: 'http://localhost/verify.aspx?ip='+ip,
                success: function(r) {

                    //r is the raw response object, we need to parse it
                    var res = Ext.decode(r.responseText, true);

                    //Then here we are. We can check the transaction
                    //status. This is the exact object you passed
                    //in the above Request-Response pair.
                    if (res.success) {
                        //ip is correct. Do your other stuff here
                    }else{
                        //ip is incorrect. You may want to show the error message
                        alert(res.message);
                    }

                }
            }); 
        }
    }]
});

Отказ от ответственности: это простой пример, надеюсь, это поможет:)

0 голосов
/ 28 октября 2011

Предполагая, что вы отправляете свою форму в C #, после того, как вы выполнили проверки и если эти проверки не пройдены, вам придется вывести JSON в следующем формате:

{
    success:false,
    errors:{
        field1:errorMsg1,
        field2:errorMsg2
    }
}

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

Вам нужно будет вывести этот JSON со стороны сервера, как вы это делаете, когда отвечаете на Ajax-запрос, и это само пометит обязательное поле как недействительное и покажет сообщение об ошибке при наведении мыши на поле.

Надеюсь, это поможет.

...