2011-10-27 105 views
0

我在extjs中有一個表單,我需要在服務器端做一些驗證測試,並返回錯誤信息 但我不知道如何做到這一點!extjs4服務器端驗證,如何?

我需要驗證,如果新添加的IP地址已經存在

我還需要驗證,如果它實際上是一個有效的ADRESS(我有一個C#功能,可以做到這一點)

如果這些條件沒關係,它可以被添加。 如果沒有,我想顯示錯誤信息給用戶說有什麼問題

現在,當我打電話給我的保存按鈕提交,我做我的C#這些測試中,我做插入查詢之前,但即使如果這些測試的arent確定它還是要說,因爲我不知道如何告訴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; 
} 

但沒有任何反應!

回答

0

假設你提交表單到C#,一旦你進行驗證,如果驗證那些失敗,那麼你將不得不輸出JSON的格式如下:

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

這裏,field1是要顯示錯誤的窗體中存在的字段的名稱。

您必須從服務器端輸出此JSON,這是您響應Ajax請求時的方式,它本身會將必填字段標記爲無效,並在鼠標懸停字段上顯示錯誤消息。

希望這會有所幫助。

+0

好,如果我得到它的權利..我提交我的C#與行動參數,然後我需要的函數被調用,它返回一個字符串與格式顯示(與fiild1匹配名稱屬性的表單域的權利?)然後我serilize它得到JSON。問題是沒有任何反應。可以請你給我一個完整的例子,ty – Armance

+0

用一些代碼編輯我的問題 – Armance

+0

你是否能夠在響應正文中看到從服務器接收到的JSON?你有沒有看到錯誤?檢查您的響應在哪裏登陸 - 成功或失敗的表單提交功能? – netemp

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

       } 
      }); 
     } 
    }] 
}); 

免責聲明:這只是一個簡單的例子,我希望它可以幫助:)

+0

非常感謝你的回覆。我試圖讓這個作品,但它似乎我甚至不能做你的預先要求!我可以做我的查詢,並得到一個響應像你說的,但我不知道如何將它發回extjs,所以它可以通過成功訪問:function(r):( – Armance

+0

你不需要顯式發送請求回Extjs。你需要做的是確保你的服務器可以管理在請求屏幕上打印json對象。當您的Ajax執行請求時,它會自動建立連接並讀取響應頁上打印的任何內容。希望它是明確的:) –