.net 验证控件和javaScript的冲突问题。

在做东西的时候偶尔同时用到javascript的事件和.net的验证控件,具体细节如下:
< head runat = " server " >
    
< title > Untitled Page </ title >
    
< script language = " javascript "  type = " text/javascript " >
    
var  IsDetailsModifed  =   true
    
function  SubmitDetailModified()
        
{
            
var retvalue;
            
if (IsDetailsModifed == true)
            
{
               retvalue 
= confirm("Do you want to save?);
            }

            
else
            
{
            alert(
"No need to save because of no field modified.");
            retvalue 
= false
            }

            
return retvalue;
            
        }

    
</ script >
</ head >
< body >
    
< form id = " form1 "  runat = " server " >
    
< div >
    
< asp:TextBox ID = " txtTest "  runat = " server "  Width = " 80px " ></ asp:TextBox >
    
< asp:RegularExpressionValidator ID = " RegularExpressionValidator4 "  runat = " server "  ControlToValidate = " txtTest "
            ErrorMessage
= " Test must be Numeric "   ValidationExpression = " ^[0-9]{1,28}.?[0-9]{0,4}$ " >*</ asp:RegularExpressionValidator >
        
< asp:Button ID = " Button1 "  runat = " server "  Text = " Button "  OnClientClick = " return SubmitDetailModified() "   />
        
< asp:ValidationSummary ID = " ValidationSummary1 "  runat = " server "  ShowMessageBox = " true "  ShowSummary = " false "   />
    
</ div >
    
</ form >
</ body >

上面的意图是,在点击按钮的时候弹出一个确认框,如果选择是则继续回传,否则阻止回传。在回传过程中如果某个字段的验证不通过,ValidationSummary 应该弹出消息框来阻止该回传.
但是事与愿违,当我单击按钮的时候,如果选择‘否’,阻止回传,正常。
但当我选择‘是’的时候,有两种情况:
1. 所有字段的验证都通过,然后点击‘是’,页面继续回传,一切正常。
2. 当有字段的验证不通过的时候,点击‘是’,验证消息不会弹出来,而且页面会继续回传,导致操作数据不正确。
为什么验证消息框会弹不出来呢?
后来,了解到.net验证控件的机制就是通过javascript来返回true或false来控制页面是否回传的。在上面的代码中,如果选择‘是’,直接在按钮的点击事件中返回true,页面当然要回传了。后来发现验证控件是通过给event.returnValue=true/false来实现阻止与否的。于是我改写了我的代码如下:
< head runat = " server " >
    
< title > Untitled Page </ title >
    
< script language = " javascript "  type = " text/javascript " >
    
var  IsDetailsModifed  =   true
    
function  SubmitDetailModified()
        
{
            
var retvalue;
            
if (IsDetailsModifed == true)
            
{
               retvalue 
= confirm("Do you want to save ?");
            }

            
else
            
{
            alert(
"No need to save because of no field modified.");
            retvalue 
= false
            }

            
if (retvalue == false)
            
{
              event.returnValue 
= retvalue; 
            }

            
        }

    
</ script >
</ head >
< body >
    
< form id = " form1 "  runat = " server " >
    
< div >
    
< asp:TextBox ID = " txtTest "  runat = " server "  Width = " 80px " ></ asp:TextBox >
    
< asp:RegularExpressionValidator ID = " RegularExpressionValidator4 "  runat = " server "  ControlToValidate = " txtTest "
            ErrorMessage
= " Test must be Numeric "   ValidationExpression = " ^[0-9]{1,28}.?[0-9]{0,4}$ " >*</ asp:RegularExpressionValidator >
        
< asp:Button ID = " Button1 "  runat = " server "  Text = " Button "  OnClientClick = " SubmitDetailModified() "   />
        
< asp:ValidationSummary ID = " ValidationSummary1 "  runat = " server "  ShowMessageBox = " true "  ShowSummary = " false "   />
    
</ div >
    
</ form >
</ body >

如果我选择'是',我什么都不做,那就是默认的继续回传,但是如果有验证不通过的字段,验证控件通过event.returnValue=false来阻止页面继续回传,这样页面就会跳出验证不通过的对话框。如果我选择‘否’,我也用event.returnValue=false的方法来阻止页面回传。这样的话,就达到了最初的目的。

总结:
在使用.net的验证控件的时候,不要再事件中直接return true or false,而是通过event.returnValue=true/false来实现页面的回传阻止。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值