2008/01/04

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

  1. 設計 <asp:Button> 與一個需要驗證的 Control:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <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:
    1
    2
    3
    4
    5
    6
    7
    8
    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.

沒有留言: