【问题标题】:extjs4 server side validation,how to?extjs4服务器端验证,怎么做?
【发布时间】:2011-10-27 12:40:54
【问题描述】:

我在 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(),当操作参数为“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;
}

但什么也没发生!

【问题讨论】:

    标签: c# forms validation extjs4 server-side


    【解决方案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);
                        }
    
                    }
                }); 
            }
        }]
    });
    

    免责声明:这只是一个简单的示例,希望对您有所帮助:)

    【讨论】:

    • 非常感谢您的回复。我试图让这个工作,但似乎我什至不能做你的预先请求!我可以像你说的那样做我的查询并得到一个响应,但我不知道如何将它发送回 extjs 以便可以通过成功访问它:function(r) :(
    • 您不需要显式地将请求发送回 Extjs。您需要做的是确保您的服务器可以根据请求在屏幕上打印 json 对象。当您的 Ajax 发出请求时,它会自动建立连接并读取响应页面上打印的任何内容。希望很清楚:)
    【解决方案2】:

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

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

    这里,field1 是表单中要显示错误的字段的名称。

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

    希望这会有所帮助。

    【讨论】:

    • 好的,如果我做对了..我将我的 for 提交给 c# 并带有一个动作参数,然后调用我需要的函数,它返回一个字符串,其格式如你所示(与 fiild1 匹配表单字段的名称属性对吗?)然后我将其序列化以获取 json。问题是什么都没有发生。你能给我一个完整的例子吗,ty
    • 您能否在响应正文中看到从服务器接收到的 JSON?您会看到任何错误吗?检查您的响应登陆到哪里 - 表单提交的成功或失败功能?
    • 没有错误,在 adddata.ashx 中我没有看到任何响应,我收到成功消息并将 ip 添加到 db
    • 我猜你的 JSON 没有作为输出发送。当您调用函数 addip 时,它会返回结果,但是您不是打印此输出吗?您必须打印此 JSON(即输出它),以便它可以在客户端使用。另外,您是否使用 Firebug 之类的工具来检查请求响应?
    • 好的,我添加了 Console.WriteLine(结果)。依然没有。我正在使用 chrome 开发工具
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 2019-12-22
    • 1970-01-01
    相关资源
    最近更新 更多