extjs4服务器端验证,如何?

时间:2011-10-27 12:40:54

标签: c# forms validation extjs4 server-side

我在extjs中有一个表单,我需要在服务器端对它进行一些验证测试并返回一条消息错误 但我不知道怎么做!

我需要验证新添加的ip地址是否已经存在

我还需要验证它是否真的是一个有效的地址(我有一个c#函数可以做到这一点)

如果这些条件合适,可以添加。 如果没有,我想向用户显示一条错误消息,说明问题是什么

现在,当我调用我的保存按钮提交时,我在执行插入查询之前在我的c#上进行了这些测试,但即使这些测试不行,它仍然表示在表单上成功,因为我不知道如何告诉extjs4错误

修改 这就是我现在要做的事情

我的表单提交:

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(),当action param是'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 个答案:

答案 0 :(得分:1)

在您启动并运行之前,请确保您已经拥有可以提供与这些呼叫类似的查询的网页:

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);
                    }

                }
            }); 
        }
    }]
});

免责声明:这只是一个简单的例子,我希望它有所帮助:)

答案 1 :(得分:0)

假设您将表单提交给C#,一旦您执行了验证并且这些验证失败,那么您将必须以下列格式输出JSON:

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

此处,field1是表单中您希望显示错误的字段的名称。

您必须从服务器端输出此JSON,就像您在响应Ajax请求时所做的那样,这本身会将所需字段标记为无效,并在鼠标悬停字段上显示错误消息。

希望这有帮助。