2008/01/04

[ASP.Net] 在asp:Button加入Vaildation與javascript的confirm

  1. 設計 <asp:Button> 與一個需要驗證的 Control:
    <asp:Button ID="btnUpdate" 
    runat="server" 
    Text="更新" 
    CommandName="Update" 
    CausesValidation="false" 
    OnClientClick="return confirmUpdate();" 
    ValidationGroup="vgUpdate" />
    <asp:TextBox ID="txtUpdateName" runat="server" Text="HelloWorld"></asp:TextBox>
    <asp:RequiredFieldValidator ID="UpdateNameRequired" 
    runat="server" 
    ControlToValidate="txtUpdateName" 
    ToolTip="必須輸入名稱。" 
    ErrorMessage="必須輸入名稱。" 
    ValidationGroup="vgUpdate">*</asp:RequiredFieldValidator> 
    • 要將 CausesValidation 設定為 false, 以避免在 Client 端產生多餘的 validation.
    • 在 OnClientClick 中設定呼叫一個 javascript 的 function.
    • 對於要驗證的項目, 需給定一個 ValidationGroup 值 (ex: vgUpdate)
  2. 加入一個 OnClientClick 會呼叫到的 javascript:
    function confirmUpdate()
    {
      if(Page_ClientValidate("vgUpdate"))
      {
        return confirm("確定要更新?");
      }
      return true;
    }
    • 呼叫 Page_ClientValidate("vgUpdate") 進行資料驗證, 參數就是 ValidationGroup 的值, 若不給定參數, 會呼叫第一個要驗證的 Control/ValidationGroup.
    • 若 Page_ClientValidate 回傳 true, 再進行 javascript 的 confirm.
    • 最後固定回傳 true. (參考下面的說明)
      若 Page_ClientValidate() 驗證不過, 會自動 hold 住事件的回傳, 所以若回傳 false, 將造成下一個事件失效 (ex: 按下更新按鈕後, 再按下取消按鈕會失效, 要再多按一次取消按鈕才會生效)
結論:
呼叫 Page_ClientValidate() 後, 需固定回傳 true.

沒有留言: