小生最近在研究一个类似于遮罩层的js脚本,在asp.net中使用html控件可以很容易的调用到该js脚本中的函数,并有响应效果;我想在服务器控件(Button)的单击事件中实现同样的效果,但效果不是很理想,我想到的两种方法都不好使。1。把代码写在Click事件中 protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Write("<script language='javascript'>ShowAlertText(document.getElementById('TextBox1').value,'','',null,null);</script>");
    }这样根本不能看到效果,而且网页提示脚本错误,其中的js函数在htmlButton的onclick事件中是可以实现的。2。在Page_Load中写入代码如下 if (!this.IsPostBack)
        {
            this.Button1.Attributes["onclick"] = "ShowAlertText(document.getElementById('TextBox1').value,'','',null,null);";
        }效果是可以出现,但是遮罩层只是瞬间的出现又关闭了,这是不是因为页面已经提交的原因?如何才能让使用者点击确定或关闭才让遮罩层消失。有人提示说直接就用html控件,但是我点击Button还需要其他的一些与数据库交互的行为,如果用js来写的话,本人对js又很生疏,不好解决,有高手能否提示一下,该情况下该如何处理才能得到想要的效果呢?

解决方案 »

  1.   

    试试:
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
                ViewState["btnClickFlag"] = "0";        
            if (ViewState["btnClickFlag"].ToString() == "1")
            {
                  Response.Write("<script language='javascript'>ShowAlertText(document.getElementById('TextBox1').value,'','',null,null);</script>");
                  ViewState["btnClickFlag"] = "0";
            }
        }
        
        protected void Button1_Click(object sender, EventArgs e)
        {
            ViewState["btnClickFlag"] = "1";
        }
      

  2.   

    if (!this.IsPostBack)
      {  }
    这个写到外面来
      this.Button1.Attributes["onclick"] = "ShowAlertText(document.getElementById('TextBox1').value,'','',null,null);return false";
      

  3.   

    出现一下又不见了是你页面刷新重新加载的问题如果不会用纯HTML控件+JS+AJAX交互。。那你原先的写法在按钮外面加个updatepannel实现无刷新
      

  4.   

    OnClientClick="show();return false"
    function show()
    {
    //弹出层
    }
    如jwindow
      

  5.   

    window.open
    OnClientClick=<%# "OpenWindow('','','');return false;"%>
    jwindow
    function OpenWindow(id,width,height)
    {
      var url = "a.aspx";
      OpenJWindow('#openwin', url, width,height, EditClosed);
    }
      

  6.   

    这里有个高手给的函数,可以解决我的问题,拿出来给大家分享一下……#region 注册和执行Js;RegisterStartupScript,RegisterClientScriptBlock
    /// <summary>
    /// 功能:执行客户端一小块脚本语言,在Page对象的<form runat= server>元素的结束标记之前发出该脚本
    /// 输入:page   网页中的Page对象
    ///       script 欲执行的JavaScript脚本
    /// 输出:无。
    /// </summary>
    public static void ExecuteStartup(System.Web.UI.Page page, string script)
    {
        string strScript;
        string strKey;
        int i;
        //脚本块的内容
        strScript = "<script language=javascript>\n";
        strScript += "    " + script + ";";
        strScript += "</script>";
        //注册脚本块的Key
        strKey = System.DateTime.Now.ToString();
        //循环,直至找到某个没被注册过的Key
        for (i = 0; i < 10000; i++)
            if (!page.ClientScript.IsStartupScriptRegistered(strKey + i.ToString()))
                break;
        page.ClientScript.RegisterStartupScript(page.GetType(), strKey + i.ToString(), strScript);
    }
      

  7.   

    这个函数的第一个参数怎么赋值呢?是aspx的页面吗? 报错哇