麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

驗證控件與Button的OnClientClick事件詳細解析

2019-11-20 21:31:45
字體:
來源:轉載
供稿:網友

一、事件

這是一個長期被我忽略或者是沒有發現的問題,問題是這樣的:

在一個頁面中,當有驗證控件的時候,當Button控件觸發OnClientClick事件,并且這個事件會返回true和false的時候,驗證控件就會失效,不起作用了。具體描述如下:

.Net頁面如下:

復制代碼 代碼如下:

<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>
<asp:TextBox ID="TextBoxTest" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBoxTest"
ErrorMessage="不能為空" Display="None"></asp:RequiredFieldValidator><ajaxToolkit:ValidatorCalloutExtender
ID="ValidatorCalloutExtender1" TargetControlID="RequiredFieldValidator1" runat="server">
</ajaxToolkit:ValidatorCalloutExtender>
<asp:Button ID="ButtonText" runat="server" Text="測試" OnClientClick="return confirm('你確定要提交嗎?');" />
</div>
</form>

如上,在頁面中加入RequireFieldValidator驗證控件,使TextBoxTest的值不能為空,在ButtonText提交頁面時,要用戶確認是否需要提交。很簡單的一個頁面,貌似也沒有什么問題。可是當TextBoxTest的值為空的時候,驗證控件竟然不起作用,提交頁面成功。這是什么原因呢?

二、響應事件

這是怎么回事呢?首先我將ButtonTest的OnClientClick事件去掉后,驗證控件是起作用的。這又是為什么呢?我查看了頁面的源代碼,發現ButtonTest控件生成如下源代碼:

<input type="submit" name="ButtonText" value="測試" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ButtonText", "", true, "", "", false, false))" id="ButtonText" />

從這行源代碼可以看出,驗證控件在客戶端生成了一段javascript代碼,驗證TextBox中的值是否為空。當我加上ButtonTest的OnClientClick后,我重新查看了源代碼,ButtonTest控件生成的源代碼如下:

<input type="submit" name="ButtonText" value="測試" onclick="return confirm('你確定要提交嗎?');WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ButtonText", "", true, "", "", false, false))" id="ButtonText" />

從這行代碼中,可以非常清楚的看到問題處在什么地方了,在客戶端,首先執行的是自定義的javascript,然后在執行驗證控件生成的這一段javascript,顯然,在這種情況下,驗證控件就失去任何意義了。

三、響應控件

知道了問題處在什么地方,就好辦了,我的解決辦法是:在執行自定義的javascript(return confirm('你確定要提交嗎?‘)前 ,就要驗證頁面中的控件是否符合規則,于是我將ButtonTest的OnClientClick事件修改如下:

復制代碼 代碼如下:

<asp:Button ID="ButtonText" runat="server" Text="測試" OnClientClick="if(CheckClientValidate()) return Confirm('你確定要提交頁面嗎?');" />

CheckClientValidate()方法的代碼如下:
復制代碼 代碼如下:

<script language="javascript" type="text/javascript">
function CheckClientValidate(){ 
   Page_ClientValidate();
   if (Page_IsValid){
   return true;
   }else{
   return false;
   }
 }
</script>

運行,測試。驗證控件發揮作用。問題解決。

四、后記

這就是被我已知忽略的問題和解決方案,當我發覺這個問題的時候,冒出了一身冷汗,幸虧做了嚴格的服務器端驗證,不然可就慘了。從這里也可以看出指定嚴格的服務器端驗證是多么的有必要啊:-)。它不僅可以防止”黑客“繞過客戶端驗證,還可以防止因為自己沒有發覺的錯誤,造成數據的不準確。

注:

Page_ClientValidate(),本函數用于在包含微軟驗證控件的aspx頁面中,根據用戶輸入操作是否合法,返回True或者False

可直接判斷。

復制代碼 代碼如下:

 if(Page_ClientValidate())
 {
 return true;
 }
 else
 {
 return false;
 }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大片毛片 | 久久久电影电视剧免费看 | 久久久久一区二区三区 | 亚洲经典视频 | 国产91精品久久久久久久 | 欧美一级特级 | 美女视频网站黄色 | 黄色免费入口 | 欧美久久一区二区 | 3xxx| 强伦女教师视频 | 久久亚洲精品国产 | 久久精品视频免费观看 | 黄网免费看 | 国产91大片 | 欧美人人干 | 久久久亚洲欧美综合 | 在线成人免费网站 | 日韩激情 | 亚洲情在线 | 巨根插入 | 亚洲免费在线视频 | 久久久久久久.comav | 成人福利在线观看 | 97超级碰碰人国产在线观看 | 久久精品一区二区三区四区五区 | 99在线精品视频免费观看20 | 色婷婷久久久久久 | 草碰人人 | 亚洲成人国产 | 国产精品久久久久久影院8一贰佰 | 末成年女av片一区二区 | 日本残忍极度灌浣肠视频 | 一级性生活视频 | 日韩黄色片在线观看 | 成年免费视频黄网站在线观看 | 欧美大电影免费观看 | 国产免费观看a大片的网站 欧美成人一级 | h视频在线免费观看 | 欧美成人精品一区二区 | 欧美黄色试片 |