小生最近在研究一个类似于遮罩层的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又很生疏,不好解决,有高手能否提示一下,该情况下该如何处理才能得到想要的效果呢?
#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);
}
this.Button1.Attributes["onclick"] = "ShowAlertText(document.getElementById('TextBox1').value,'','',null,null);return false;";
1.首先你的第一种方法出不来是正常的,Response.Write()输入的内容返回到客户端的时候,是出现在页面的顶部的,你可以查看一下源文件确认一下,在页面顶部的话,刚开始加载的时候,还没有加载到TextBox1,所以报脚本错误
2.像1楼说的 那样,加上return false,可以避免提交,可以解决弹出遮罩层的问题