首页 新闻 会员 周边

如何在服务器控件的触发事件中执行js脚本函数

-1
悬赏园豆:50 [已解决问题] 解决于 2010-09-12 14:35

小生最近在研究一个类似于遮罩层的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又很生疏,不好解决,有高手能否提示一下,该情况下该如何处理才能得到想要的效果呢?

偷师学艺的主页 偷师学艺 | 初学一级 | 园豆:150
提问于:2010-09-11 09:39
< >
分享
最佳答案
0

#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);
}

收获园豆:30
Astar | 高人七级 |园豆:40805 | 2010-09-11 11:40
click中调用此静态函数。
Astar | 园豆:40805 (高人七级) | 2010-09-11 11:40
其他回答(2)
0

this.Button1.Attributes["onclick"] = "ShowAlertText(document.getElementById('TextBox1').value,'','',null,null);return false;";

收获园豆:20
I,Robot | 园豆:9783 (大侠五级) | 2010-09-11 09:53
果然很强大,但是弱弱的问一句,这行代码写在Page_Load事件中可以执行,但是在Click事件中就不能出现效果了。如果我的Button_Click中还要执行其他的交互代码,这样事件的处理代码写在Click事件中就处理不了了; 如 { Response.Write("Hello world!!!"); Response.Write("<script language='javascript'>ShowAlertText(document.getElementById('TextBox1').value,'','',null,null);return false;</script>"); } Hello World可以写出来,但是后面的代码就没哟办法执行了。 这个问题有办法解决吗?高手提示下吧……
支持(0) 反对(0) 偷师学艺 | 园豆:150 (初学一级) | 2010-09-11 10:31
我下面已经解释Response.Write()的问题了,一般在服务器端输出脚本用二楼说的,page.ClientScript.RegisterStartupScript()
支持(0) 反对(0) yixin841210 | 园豆:1138 (小虾三级) | 2010-09-11 12:30
return false后,按钮是不会有回发操作的了. 如果,你又要弹出div又要Button.Click执行的话,那你可以用下面同学说的在Button.Click中用page.ClientScript.RegisterStartupScript()来向页面注册你的js代码,再做你在Click中要做的事,这样,回发之后当页面载入后也会弹出你的div.
支持(0) 反对(0) I,Robot | 园豆:9783 (大侠五级) | 2010-09-11 13:41
0

1.首先你的第一种方法出不来是正常的,Response.Write()输入的内容返回到客户端的时候,是出现在页面的顶部的,你可以查看一下源文件确认一下,在页面顶部的话,刚开始加载的时候,还没有加载到TextBox1,所以报脚本错误

2.像1楼说的 那样,加上return false,可以避免提交,可以解决弹出遮罩层的问题

yixin841210 | 园豆:1138 (小虾三级) | 2010-09-11 12:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册