产生时
Button btn=new Button();
btn.Attribute.Add("onclick","return false;");或者你为什么不生成html的button?

解决方案 »

  1.   

    对呀,为什么不用html的button??
    :)
      

  2.   

    非常感谢,我是个菜鸟,还想多问两句,如果Button是静态生成的,btn.Attribute.Add("onclick","return false;"),这一句该如何实现?
       我没有使用html的button,是不知道用它如何产生Button_Click动作,请问有好办法吗?
       另外,我还想知道,post在什么情况下会发生,究竟做了什么操作,非常想知道
      

  3.   

    把那语句放到pageload事件里
      

  4.   

    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    if(!Page.IsPostBack)
    {
                   btn.Attribute.Add("onclick","return false;");
    }
    }这样就可以调用Button1_click函数了,这个函数是在客户端用javascript写的!在这里你就可以实现你的功能了!
    <input type="button" onclick="Button1_Click()">总的来说,post就是在页面提交时!也就是如果是runat="server"的控件,在click时,就会提交,并不是每一种控件都是一样!总的理解就是页面调用submit()是就会post!
      

  5.   

    好象不太对劲,加入btn.Attribute.Add("onclick","return false;")这句后,post动作是没有了,原来点击另一个Button后动态生成的控件也保留下来了,但Button_Click中原来的操作也失效了,也就是说ButtonClick动作不产生任何后果了,而不是单单去掉post操作
      

  6.   

    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    if(!Page.IsPostBack)
    {
                   btn.Attribute.Add("onclick","return false;");
    }
    }
      

  7.   

    首先,动态生成的控件必须在每次Page Load的时候重新加到对应的Controls中
    其次,如果你用的是<asp:Button ...>,那么对应的html元素是一个<input type=submit>。如果你只是想做一些客户端的操作,那么用普通的<input type=button>就行了。如果需要读取客户端的数据,那么必须post表单。
    当然,在submit的onclick里面加上return false可以阻止表单的提交,但是我认为还不如直接用<input type=button>方便。
      

  8.   

    我试过了,如各位所说,用html的button和javascript可以实现一些简单的操作,但是,如果我想利用button调用隐藏文件的函数又不产生post动作,好象就实现不了,我的测试代码如下,想请各位帮我看看:
    1.静态生成两个button,分别为Button1和Button2;
    2.点击Button1,动态生成一个Panel和一个checkbox,代码如下
            Dim Oper_Panel As New Panel()
            Dim Oper_Check As New CheckBox()
            Oper_Panel.ID = "Pan1000"        Oper_Panel.HorizontalAlign() = HorizontalAlign.Left
            Oper_Panel.BorderStyle() = BorderStyle.Double
            Oper_Panel.BorderColor() = Color.LightSeaGreen()        Oper_Panel.BackColor() = Color.Bisque        Oper_Panel.Controls.Add(New LiteralControl("hello"))
            Oper_Panel.Controls.Add(New LiteralControl("<hr>"))
            Oper_Check.ID = "test11"
            Oper_Check.Text = "hello!"
            'Oper_Panel.Controls.Add(Oper_Check)
            Me.FindControl("form1").Controls.Add(Oper_Panel)
            Me.FindControl("form1").FindControl("Pan1000").Controls.Add(Oper_Check)
            Me.Controls.Add(New LiteralControl("<hr>"))
    3.选中checkbox,使其checked为True;
    4.点击Button2,根据CheckBox的状态写入后台数据库相应数据,问题就出在这一步,因为产生了post动作,而控件又是动态生成的,findControl将不再能找到checkbox和它的状态,同时动态控件也会消失;
    5.是否有好办法解决这个问题?
      

  9.   

    您可以尝试在Page_Load中执行
            'Oper_Panel.Controls.Add(Oper_Check)
            Me.FindControl("form1").Controls.Add(Oper_Panel)
            Me.FindControl("form1").FindControl("Pan1000").Controls.Add(Oper_Check)
            Me.Controls.Add(New LiteralControl("<hr>"))
      

  10.   

    好象不能最终解决问题,即便在Page_Load中加入代码,点击Button后动态控件依然会消失。
    我最终要实现的功能实际上是一套操作员权限管理的功能,也就是说,首先是根据管理员的权限,动态生成他可以赋予权限的菜单(checkbox和Panel),再选取DropDownList里的操作员,根据操作员已有的权限,设置checkbox的状态,最后,管理员重新赋予权限后,提交给数据库,也就是说一共有三个动作,第二个动作和第三个间有客户端的动作在里面,所以不能重载,很麻烦。
    是不是有这种可能,javascript里嵌asp.net的代码?