本文解决了ASP.NET1.1, ASP.NET2.0,ASP.NET3.5中验证控件和自定义弹出确认窗口的冲突问题的。

在asp.net页面中,当有验证控件,并且想在验证控件验证经过之后,弹出一个承认对话框,提示是否持续。

ASP.NET1.1、ASP.NET2.0、ASP.NET3.5中验证控件等问题(ASP.NET验证控件)  验证控件 ASP.NET1.1 ASP.NET2.0 第1张

当在button按钮上增加客户端的onclick="return confirm('Are you sure to continue?')"时,验证控件的验证就会失效。由于验证控件也是增加客户端的onclick事情。

ASP.NET2.0, asp.net3.5中能够运用如下办法处理。(ASP.NET1.1的稍后再说)

首要将button的CausesValidation=“false”, 即

  1. <asp:ButtonID="Button1"runat="server"Text="Button"CausesValidation="False"OnClick="clickme"/>

其实,CausesValidation="False/True"都不会有任何影响。

接着,在后台代码的Page_Load事情中,注册客户端的onclick事情。

办法1:

  1. protectedvoidPage_Load(objectsender,EventArgse)
  2. {
  3. Button1.OnClientClick=ClientScript.GetPostBackEventReference(
  4. newPostBackOptions(Button1,"","",false,true,false,false,true,""))
  5. +";return(Page_IsValid&&confirm('Areyousuretocontinue?'));";
  6. }

这儿要特别注意的一个当地是,不能把它放在if(!isPostBack) {...}的里边,否则,***次正常,下一次开端就会报

Microsoft JScript 运转时过错: 'WebForm_PostBackOptions' 未定义

即要求每触发一次,都要从头注册一次onclick事情。

昨日测验的时分有这个问题,可能是VS2008装置的有问题的原因(规划形式就无法显现),

今日测验了下,能够只注册一次,即页面加载时,如下:

  1. protectedvoidPage_Load(objectsender,EventArgse)
  2. {
  3. if(!IsPostBack)
  4. {
  5. Button1.OnClientClick=ClientScript.GetPostBackEventReference(
  6. newPostBackOptions(Button1,"","",false,true,false,false,true,""))
  7. +";return(Page_IsValid&&confirm('Areyousuretocontinue?'));";
  8. }
  9. }

验证控件办法2:

  1. protectedvoidPage_Load(objectsender,EventArgse)
  2. {
  3. if(!IsPostBack)
  4. {
  5. Button1.OnClientClick="javascript:WebForm_DoPostBackWithOptions(newWebForm_PostBackOptions('Button1','',true,'','',false,false));return(Page_IsValid&&confirm('Areyousuretocontinue?'));WebForm_DoPostBackWithOptions(newWebForm_PostBackOptions('Button1','',true,'','',false,false))";
  6. }
  7. }

其实,办法1运转后,在客户端html中生成的onclick代码便是办法2中的代码。

若是用办法2的办法在后台直接写javascript字符串,则能够去掉***一句,否则,就多了一次验证了。即如下:

  1. protectedvoidPage_Load(objectsender,EventArgse)
  2. {
  3. if(!IsPostBack)
  4. {
  5. Button1.OnClientClick="javascript:WebForm_DoPostBackWithOptions(newWebForm_PostBackOptions('Button1','',true,'','',false,false));return(Page_IsValid&&confirm('Areyousuretocontinue?'));";
  6. }
  7. }

办法1每次点击按钮之前都要在page_load中注册一次,而办法2只要在page_load中注册一次就够了。

vb.net与C#生成的html客户端代码有点点不同

  1. ProtectedSubPage_Load(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMe.Load
  2. IfNotMe.Page.IsPostBackThen
  3. Me.Button1.OnClientClick="javascript:WebForm_DoPostBackWithOptions(newWebForm_PostBackOptions('Button1','',true,'name','',false,false));return(Page_IsValid&&confirm('Areyousuretocontinue?'));"
  4. EndIf
  5. EndSub

  1. ProtectedSubPage_PreRender(ByValsenderAsObject,ByValeAsSystem.EventArgs)HandlesMe.PreRender
  2. IfNotMe.Page.IsPostBackThen
  3. 'VB.NET中要把下面这句放在Page_PreRender里,不能放在Page_Load中,且只需要注册一次就能够了
  4. '在生成html的客户端代码中,比C#少了一部分代码。
  5. Me.Button1.OnClientClick=Me.Page.ClientScript.GetPostBackEventReference(NewSystem.Web.UI.PostBackOptions(Me.Button1,"","",False,True,False,False,True,"name"))&_
  6. ";return(Page_IsValid&&confirm('Areyousuretocontinue?'));"
  7. EndIf
  8. EndSub

asp.net2.0和asp.net3.5的介绍完了,下面介绍asp.net 1.1里的处理方案

首要也是将button的CausesValidation=“false”, 即

  1. <asp:ButtonID="Button1"runat="server"Text="Button"CausesValidation="False"OnClick="clickme"/>

接着,在后台代码的Page_Load事情中,注册客户端的onclick事情。

  1. privatevoidPage_Load(objectsender,System.EventArgse)
  2. {
  3. //在此处放置用户代码以初始化页面
  4. if(!this.Page.IsPostBack)
  5. {
  6. stringmsg="javascript:if(typeof(Page_ClientValidate)=='function'){if(Page_ClientValidate())returnwindow.confirm('Areyousuretocontinue?');}";
  7. this.Button1.Attributes.Add("onclick",msg);
  8. }
  9. }

因asp.net1.1中注册onclick代码只包括javascript代码,故能够放在if(!IsPostBack){...} 里边而不会有问题。

这样就会先验证控件,经过了再弹出承认对话框。

【修改引荐】

  1. ASP.NET MVC分页控件的完成
  2. ASP.NET MVC实例:运用Northwind和Entity结构
  3. 戏说ASP.NET的解说原理
  4. ASP.NET cookie操作心得一览
  5. ASP.NET取得当时插入行主键的代码
转载请说明出处
知优网 » ASP.NET1.1、ASP.NET2.0、ASP.NET3.5中验证控件等问题(ASP.NET验证控件)

发表评论

您需要后才能发表评论