簡體   English   中英

如何在ASP.NET中禁用JavaScript時處理驗證

[英]How to handle validation when JavaScript is disabled in ASP.NET

我在我的網站上使用了一些典型的ASP.NET驗證控件。 現在,我正在嘗試在瀏覽器中禁用JavaScript來測試我的應用程序,當然Validation Controls不再有效。 我認為最好是嘗試使用其中一個建議的解決方案,而不是重新投資輪子並為頁面或我的對象構建驗證層- 我認為對嗎? -

您如何看待這些選項以及原因:

  1. 在單擊按鈕的事件中包含一個代碼,用於檢查頁面是否有效以及是否顯式調用Page.Validate(); 方法

  2. 檢查是否啟用了JavaScript,如果沒有,我應該調用Page.Validate();

如果您有更好的方法,請告訴我。

Javascript表單驗證純粹是為了方便用戶。 這使他們無法提交帶有無效電話號碼的表格。

當收到任何請求時,所有輸入實際上應在服務器上進行驗證。 這是理想的流程,你會發現沒有啟用javascript的瀏覽器沒什么大不了的:

browser -> javascript validation (optional) -> server validation (if this fails, go back to initial page with errors)

因此,即使他們沒有JS,頁面仍然提交數據,然后您可以從服務器返回錯誤。 這通常是較差的用戶體驗(整頁重新加載,可能重新輸入輸入,除非您重新填充表單)這就是為什么JS通常包含在驗證方案中。

驗證控件旨在主要在服務器端進行驗證。 客戶端驗證是可選的(請參閱EnableClientScript屬性)。 因此,如果他們沒有禁用Javascript,那么您可能在頁面中遺漏了一些樣板代碼,例如來自Page.IsValid上的MSDN文檔中的這個代碼段:

private void ValidateBtn_Click(Object Sender, EventArgs E)
{
    Page.Validate();
    if (Page.IsValid == true)  // yes, it is written this way in the MSDN documentation
        lblOutput.Text = "Page is Valid!";
    else
        lblOutput.Text = "Some required fields are empty.";
}

您還可以調用Page.Validate並在Page的OnLoad事件中檢查Page.IsValid ,以便在需要重新提交表單時阻止回發繼續執行下一步。 您可能甚至不需要顯式調用Validate() - 默認情況下Button.CausesValidation為true。

您需要進行自定義服務器端驗證... http://msdn.microsoft.com/en-us/library/aa479013.aspx (底部信息)

像這樣的東西:

<%@ Page Language="C#" %>
<script runat="server">

      void Button1_Click(Object sender, EventArgs e) {
         if (Page.IsValid) {
            Label1.Text = "VALID ENTRY!";
         }
      }

      void ValidateNumber(object source, ServerValidateEventArgs args)
      {
         try 
         {
            int num = int.Parse(args.Value);
            args.IsValid = ((num%5) == 0);
         }
         catch(Exception ex)
         {
            args.IsValid = false;
         }
      }

</script>
<html>
<head>
</head>
<body>
    <form runat="server">
        <p>
            Number: 
            <asp:TextBox id="TextBox1" 
             runat="server"></asp:TextBox>

            <asp:CustomValidator id="CustomValidator1" 
             runat="server" ControlToValidate="TextBox1" 
             ErrorMessage="Number must be even" 
             OnServerValidate="ValidateNumber"></asp:CustomValidator>
        </p>
        <p>
            <asp:Button id="Button1" onclick="Button1_Click" 
             runat="server" Text="Button"></asp:Button>
        </p>
        <p>
            <asp:Label id="Label1" runat="server"></asp:Label>
        </p>
    </form>
</body>
</html>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM