我在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;
}
但没有任何反应!
答案 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请求时所做的那样,这本身会将所需字段标记为无效,并在鼠标悬停字段上显示错误消息。
希望这有帮助。