最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

驗(yàn)證控件與Button的OnClientClick事件詳細(xì)解析

 更新時間:2013年12月04日 09:54:43   作者:  
以下就是被我已知忽略的問題和解決方案,當(dāng)我發(fā)覺這個問題的時候,冒出了一身冷汗,幸虧做了嚴(yán)格的服務(wù)器端驗(yàn)證,不然可就慘了

一、事件

這是一個長期被我忽略或者是沒有發(fā)現(xiàn)的問題,問題是這樣的:

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

.Net頁面如下:

復(fù)制代碼 代碼如下:

<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驗(yàn)證控件,使TextBoxTest的值不能為空,在ButtonText提交頁面時,要用戶確認(rèn)是否需要提交。很簡單的一個頁面,貌似也沒有什么問題??墒钱?dāng)TextBoxTest的值為空的時候,驗(yàn)證控件竟然不起作用,提交頁面成功。這是什么原因呢?

二、響應(yīng)事件

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

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

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

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

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

三、響應(yīng)控件

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

復(fù)制代碼 代碼如下:

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

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

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

運(yùn)行,測試。驗(yàn)證控件發(fā)揮作用。問題解決。

四、后記

這就是被我已知忽略的問題和解決方案,當(dāng)我發(fā)覺這個問題的時候,冒出了一身冷汗,幸虧做了嚴(yán)格的服務(wù)器端驗(yàn)證,不然可就慘了。從這里也可以看出指定嚴(yán)格的服務(wù)器端驗(yàn)證是多么的有必要啊:-)。它不僅可以防止”黑客“繞過客戶端驗(yàn)證,還可以防止因?yàn)樽约簺]有發(fā)覺的錯誤,造成數(shù)據(jù)的不準(zhǔn)確。

注:

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

可直接判斷。

復(fù)制代碼 代碼如下:

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

相關(guān)文章

最新評論

辽阳县| 紫金县| 通化市| 射阳县| 衡东县| 宣化县| 沾益县| 西青区| 绿春县| 涡阳县| 富川| 宜昌市| 泽普县| 云安县| 都安| 永安市| 德格县| 铜鼓县| 库尔勒市| 乌鲁木齐县| 晋江市| 永福县| 凤翔县| 贵溪市| 石门县| 汉源县| 曲靖市| 历史| 化德县| 盘锦市| 依兰县| 昆山市| 瑞金市| 茶陵县| 佛冈县| 内乡县| 微山县| 长乐市| 平江县| 松溪县| 永和县|