目标:
     当按下按钮时,弹出确认对话框,如果点否,不执行任何操作,
                                 如果点是, 确认页面的有效性(Validators 是否验证成功)
                                           如果通过,执行该按钮服务器端的事件处理
要求:
     通过添加 [ 客户端脚本 ]实现==========================================================================================
当按钮的CausesVlidation == true, 并且页面上有Validator的时候,页面就会发生错误,不弹出对话框代码如下:protected System.Web.UI.WebControls.Button Button1;private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if( !Page.IsPostBack )
{
Button1.Attributes.Add( "onclick","javascript:return confirm('确定添加记录吗?')" );}
}
==========================================================================================
生成的页面代码如下:   
<input type="submit" name="Button1" value="Button" onclick="javascript:return confirm('确定添加记录吗?')if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); " language="javascript" id="Button1" />==========================================================================================当我将Button1.Attributes.Add( "onclick","javascript:return confirm('确定添加记录吗?')" );
  改为Button1.Attributes.Add("onclick", "return confirm('确定添加记录吗?');");
的时候,当Validators未成功验证时,仍然执行了服务器断的操作,这不是期望的结果,请问如何解决

解决方案 »

  1.   

    Button1.Attributes.Add( "onclick","<script language='javascript'>return confirm('确定添加记录吗?');</script>" );
      

  2.   

    to:alexzhang00(三角猫)   他这个也不行啊  大家都试过没有啊?我的代码里的原来就是有分号的,我现在把他的复制过去了,一样不好使 = =!
      

  3.   

    这个问题我也碰到了,还没有找到满意的方法
    本来有个思路,不知道可不可以
    RegisterOnSubmitStatement()
    使用它试试!
      

  4.   

    http://community.csdn.net/Expert/topic/4191/4191319.xml?temp=4.076785E-02
      

  5.   


        注意 !!!!!!!!!!!!!!!!!!!1         最大的问题是,当onclick( at client )事件里面加入 "return xxx;" 之后,
             即使页面上的Validator检测出页面内容不符合规格,并且在ValidationSummary中显示了n条Errormessage,该按钮的服务器断的OnClick事件还是执行了,这是最要命的。
      

  6.   

    顺便b4一下 bitsbird(一瓢 在路上...) 和  alexzhang00(三角猫) , 也不看明白人家说的什么就随便弄了两行上来
      

  7.   

    molti(八极狂侍) 我现在做了个验证控件 也和你这个有关
     我现在也在弄客户端效验 我们qq聊吧  也许有新的突破
    我21594600 msn 也可以 你[email protected]看到后留言
      

  8.   

    没办法了,仍然在用 LinkButton,Text属性中写一个<div onclick="return confirm('xxx' )">
    拦截冒泡消息
    继续探索Button的解决之道
      

  9.   

    molti(八极狂侍) 说得是,验证他要通过服务器返回,但是你的js在客户端就验证了,所以点击事件还是会触发,我看你还是加到按钮点击事件里面进行判断算了!~~
      

  10.   

    Button1.Attributes.Add( "onclick","<script language='javascript'>return confirm('确定添加记录吗?');</script>" );这个应该是可以的,只要你确定以后,自己用脚本写个验证(不要用验证控件,因为验证控件是在服务器端执行的),通过就调用服务器事件,这样就可以了.
    只能是如果一直在服务器端,就全部用服务器端,反之也是.反正不能一会服务器,一会客户端,肯定不起作用的.
      

  11.   

    TO:lyb_abiandbel
      你在那儿胡说八道什么呢?一直都是在客户端验证的,什么时候说在服务器端了?
      

  12.   

    Button1.Attributes.Add( "onclick","<script language='javascript'>return confirm('确定添加记录吗?');</script>" );
      

  13.   

    用js 的confirm吧
    上面的就应该可以
    你找下其他的问题看看
      

  14.   

    Button1.Attributes.Add("onclick", "return confirm('确定添加记录吗?');");你做过这个以后,还要再把Button1的事件处理时进行判断是否验证通过
    private void Button1_Click(object sender, System.EventArgs e)
    {
    if(Page.IsValid)
    {
    "提交";
    }
    else
    {
    "不能提交";
    }
              }
      

  15.   

    关于自定义javascript和验证控件javascript在同一个button上冲突的问题
    以一个例子来描述:
    『aspx 页面代码』//===头两个textbox准备用自己的js判断不能同时为空===
    <asp:textbox id="usrName" runat="server"></asp:textbox><span id="usrNameErrorTag" style="DISPLAY: none; COLOR: red">*</span>
    <asp:textbox id="usrId" runat="server"></asp:textbox><span id="usrIdErrorTag" style="DISPLAY: none; COLOR: red">*</span><BR>//===下一个dropdownlist用验证控件判断不为空===
    <asp:dropdownlist id="DropDownList1" runat="server">
    <asp:ListItem Value="">-----</asp:ListItem>
    <asp:ListItem Value="a">a</asp:ListItem>
    <asp:ListItem Value="b">b</asp:ListItem>
    <asp:ListItem Value="c">c</asp:ListItem>
    <asp:ListItem Value="d">d</asp:ListItem>
    </asp:dropdownlist>
    //===用到的验证控件===
    <asp:requiredfieldvalidator id="RequiredFieldValidator1" runat="server" ControlToValidate="DropDownList1" ErrorMessage="*">test</asp:requiredfieldvalidator><BR>//===按钮===
    <asp:button id="Button1" runat="server" Text="Button" CausesValidation="False"></asp:button></FONT>我建议两种方法:第一种利用验证控件除了能客户端js验证,还能再服务端验证
    1)Button1的CausesValidation设为false,不让.net自动生成验证的js(就是源代码中的"if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate();")2)为Button1添加自己的javascript:
    『aspx 页面js代码』
    function UsrNameOrUsrIdValidate()
    {
    if(document.all["usrName"].value =="" && document.all["usrId"].value=="")
    {
    document.all["usrNameErrorTag"].style.display = "inline";
    document.all["usrIdErrorTag"].style.display = "inline";
    return false;
    }
    }
    『cs中的代码』
    private void Page_Load(object sender, System.EventArgs e)
    {
    Button1.Attributes.Add("onclick","return UsrNameOrUsrIdValidate();");
    }这样页面就验证自定义的js"UsrNameOrUsrIdValidate";3) 在服务期端判断.net验证控件的部分
    『cs中的代码』
    private void Button1_Click(object sender, System.EventArgs e)
    {
    Page.Validate();
    if(Page.IsValid)
    {
    Response.Write("a");
    }
    }其中的Page.Validate()就是在服务器端验证第二种都在客户端用js验证,推荐!!‘只要在第一种的第2)步中,js改为『aspx 页面js代码』
    function UsrNameOrUsrIdValidate()
    {
    if(document.all["usrName"].value =="" && document.all["usrId"].value=="")
    {
    document.all["usrNameErrorTag"].style.display = "inline";
    document.all["usrIdErrorTag"].style.display = "inline";
    return false;
    }
    else
    {
    document.all["usrNameErrorTag"].style.display = "none";
    document.all["usrIdErrorTag"].style.display = "none";
    if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate();
    }
    }原理很简单就是 先判断自定义的js,然后把.net自动生成的js"if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate();"手工写在后面就可以
    当然前提是Button1的CausesValidation设为false.以上就是我想到的办法,当然你可以把全部验证用自己的js写,在这我只讨论关于自定义javascript和验证控件javascript在同一个button上冲突的解决
      

  16.   

    你这么写js逻辑有问题
    return confirm(".....");
    因为你先判断confirm 当用户点击确认时 你return true 了相当于已经提交而每进行客户端的验证
    有个简单的方法,
    button.Attribute.Add("javascript: if(!confirm("ary ready") return false; )")
      

  17.   

    Add("onclick" , ("javascript: if(!confirm(\"ary ready\") return false; )"))
      

  18.   

    sorry 还是写错了少了一个括号,汗
    Add("onclick" , ("javascript: if(!confirm(\"ary ready\")) return false; )"))