[英]How to handle validation when JavaScript is disabled in ASP.NET
我在我的網站上使用了一些典型的ASP.NET驗證控件。 現在,我正在嘗試在瀏覽器中禁用JavaScript
來測試我的應用程序,當然Validation Controls
不再有效。 我認為最好是嘗試使用其中一個建議的解決方案,而不是重新投資輪子並為頁面或我的對象構建驗證層- 我認為對嗎? -
您如何看待這些選項以及原因:
在單擊按鈕的事件中包含一個代碼,用於檢查頁面是否有效以及是否顯式調用Page.Validate();
方法
檢查是否啟用了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.