2012-08-09 105 views
2

我曾在ASP.net MVC工作了1.5年。我在哪裏使用企業應用程序塊進行服務器端驗證。我喜歡視圖模型與視圖控件和驗證以這種方式工作的方式綁定的方式。但是現在我正在一個完全沒有MVC的webforms的項目中工作。ASP .net驗證技術

這裏jQuery用於客戶端驗證,根本沒有服務器端驗證。我強調了服務器端驗證的重要性,並計劃同樣使用企業庫。

由於某些原因(可能是由於我最近在ASP.NET MVC中工作的原因),我陷入了一個困境。

在我的webforms應用程序中,我的驗證必須包含客戶端和服務器端的相同邏輯。或者一般來說,在ASP .net web表單中編碼驗證的最佳實踐是什麼?

我想遵循被廣泛接受的做法。還有什麼新的概念用於webforms驗證,比企業庫更好。樣本應該幫助我理解。

回答

1

我想你會想驗證更多而不是更少的...除了客戶端檢查之外,服務器端檢查是一個好主意(尤其是對於面向外部的應用程序)。你想特別小心文本框。記住用戶可以關閉腳本(並完全繞過客戶端腳本)。

使用啓動ServerValidate事件的自定義驗證器控件實現服務器端驗證非常簡單。

我還沒有與企業庫合作過,所以我無法回答它提供的任何驗證例程。

1

你可以使用CustomValidators做任何事情,它們是我的最愛!

如果您使用HTML5屬性,如required="required",您可以免費獲得客戶端反饋。

您可以利用它們還可以像這樣執行服務器端驗證:

<asp:ValidationSummary runat="server" id="vSummary" /> 

<asp:TextBox runat="server" id="txtReq" required="required" /> 
<asp:DropDownList runat="server" id="ddlReq" required="required"> 
    <asp:ListItem text="..." value="" /> 
    <asp:ListItem text="Yes" value="1" /> 
    <asp:ListItem text="No" value="0" /> 
</asp:DropDownList> 

<asp:Button runat="server" id="cmdSubmit" text="Submit" /> 

碼功能的背後:

private void buildRequiredWebControls(List<WebControl> lst, Control c) 
{ 
    if (c is WebControl) 
     if (String.Compare((c as WebControl).Attributes["required"] ?? String.Empty, "required", true) == 0) 
      lst.Add((c as WebControl)); 

    foreach (Control ch in c.Controls) 
     buildRequiredWebControls(lst, ch); 
} 

/* --------------------------------------------- */ 

private Boolean addAllFieldsRequired(List<WebControl> controls) 
{ 
    foreach (WebControl w in controls) 
    { 
     if (w as TextBox != null) 
      if (String.IsNullOrWhiteSpace((w as TextBox).Text)) return false; 

     if (w as DropDownList != null) 
      if (String.IsNullOrWhiteSpace((w as DropDownList).SelectedValue)) return false; 
    } 
    return true; 
} 

/* --------------------------------------------- */ 

private void cmdSubmit_Click(object sender, EventArgs e) 
{ 
    vSummary.ValidationGroup = "StackOverflow"; 
    Page.Validate("StackOverflow"); 

    List<WebControl> requiredFields = new List<WebControl>(); 
    this.buildRequiredWebControls(requiredFields, this); 

    Page.Validators.Add(new CustomValidator() 
    { 
     IsValid = this.addAllFieldsRequired(requiredFields), 
     ErrorMessage = "Please complete all required fields.", 
     ValidationGroup = "StackOverflow" 
    }); 

    if (Page.IsValid) 
    { 
     //Good to Go on Required Fields 
    } 
} 

節拍很單調的替代,這是手動將它們插入到每次控制後的html:

<asp:ValidationSummary runat="server" id="vSummary" ValidationGroup="StackOverflow" /> 

<asp:TextBox runat="server" id="txtReq" required="required" /> 
<asp:RequiredFieldValidator runat="server" ControlToValidate="txtReq" ErrorMessage="Please Fill Out Required Field" Text="*" ValidationGroup="StackOverflow" /> 

<asp:DropDownList runat="server" id="ddlReq" required="required"> 
    <asp:ListItem text="..." value="" /> 
    <asp:ListItem text="Yes" value="1" /> 
    <asp:ListItem text="No" value="0" /> 
</asp:DropDownList> 
<asp:RequiredFieldValidator runat="server" ControlToValidate="ddlReq" ErrorMessage="Please Fill Out Required Field" Text="*" ValidationGroup="StackOverflow" /> 

<asp:Button runat="server" id="cmdSubmit" text="Submit" />