2012-04-24 48 views
0

我有一個webform應用程序。Asp.net。什麼是最好的方式,服務器端驗證和客戶端驗證一起工作很好

在客戶端,我使用自定義JavaScript驗證來高亮文本框,並在文本被更改或單擊提交按鈕時顯示驗證消息。

服務器端驗證發生在提交。它帶回一列消息(字符串)以防止系統保存表單。

客戶端驗證是通用的,例如,在服務器驗證需要處理數據記錄時檢查「必填字段」,「有限字」, 「現有名稱」,「當表B中存在相關記錄時,用戶必須指定選項'A'。」

服務器端驗證的缺點是它只帶回消息摘要,但不能顯示消息在文本框旁邊。 (服務器端如何知道每個控件ID或在哪裏顯示每個味精?)

服務器端和客戶端驗證如何一起工作以顯示每個文本框的味精?任何漂亮的設計或.NET體系結構? 肯定所有的客戶端驗證都會以任何方式複製到服務器端。

THX

回答

2

IMO ASP.NET驗證器是很不錯的,你可以檢查服務器端驗證與Page.IsValid

如果您不會檢查每個控件的顯示器消息框的服務器值或其他值,則可以使用CustomValidator並使用ajax調用某個服務器端方法並將其用於驗證。

這是CustomValidator調用服務器端ashx處理程序的JavaScript函數的示例,以檢查郵件地址是否有效,這只是一個示例,您可以使用ASP.NET爲調用服務器端提供的其他方法(服務,頁面方法等等)

只是一個注意:這不是服務器側驗證的替代,你仍然需要,因爲這可以很容易地避免。

function IsEmailValid(val, args) { 

    var strUrl = "/SiteHandler.ashx?CheckEmail=" + args.Value; 
    var strReturn = ""; 

    $.ajax({ 
      url: strUrl, 
      success: function (html) { strReturn = html; }, 
      async: false 
     }); 

    args.IsValid = strReturn == "true"; 
} 

設置,其功能是自定義的驗證:

customValidator.ClientValidationFunction = "IsEmailValid"; 

在服務器端在ashx的處理程序:

public void ProcessRequest(HttpContext context) 
{ 
    if (context.Request.Params["CheckEmail"] != null) 
    { 
    if (CallSomeCustomLogicAndReturnIsMailOK(context.Request.Params[CheckEmail])) 
     context.Response.Write("true"); 
    else 
     context.Response.Write("false"); 
    } 
} 
1

一個很好的解決辦法是使用AJAX來提交表單。您可以使用許多庫中的一個,或者擴展您的自定義JavaScript解決方案來實現它。如果服務器驗證失敗,您可以連接以顯示與客戶端驗證相同的消息。你說的正確的是,在這兩種情況下,消息應該是相同的。用戶不關心服務器或客戶端的驗證是否失敗。

相關問題