我设计了一个自定义ConfirmButton2控件,继承自Button,源码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;namespace com.cait
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:ConfirmButton2 runat=server></{0}:ConfirmButton2>")]
public class ConfirmButton2 : Button
{
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public string ConfirmMessage // 确认对话框中提示文字
{
get
{
String msg = (String)ViewState["ConfirMessage"];
return ((msg == null) ? "您确认吗" : msg);
}
set
{
ViewState["ConfirMessage"] = value;
}
} // 在生成按钮的时候增加一个属性
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
this.Attributes.Add("onclick",
String.Format("return buttonconfirm('{0}');", this.ConfirmMessage)); base.AddAttributesToRender(writer);
} // 生成内容使用 Button 的默认生成方法,不再进行修改 // 此方法将在生成之前被调用,我们在这里进行脚本的检查和注册
protected override void OnPreRender(EventArgs e)
{ if (!this.Page.ClientScript.IsClientScriptBlockRegistered("Confirm")) {
// 加入脚本函数
string script = "<script>\r\n function buttonconfirm(msg)\r\n {return window.confirm(msg);}\r\n</script>";
this.Page.ClientScript.RegisterClientScriptBlock(
this.GetType(),
"Confirm",
script);
} base.OnPreRender(e);
}
}
}我在主页面,拖了2个 这种类型的按钮上去。。随后我就去跟踪这个OnPreRender(EventArgs e)函数,我发现,程序2次调用到了这个函数,
第一次,this.Page.ClientScript.IsClientScriptBlockRegistered("Confirm") 为false,随后就开始注册客户端脚本Confirm块了。第二次,程序再一次到了断点this.Page.ClientScript.IsClientScriptBlockRegistered("Confirm") 处,但是仍然返回false,不知道为什么会这样,再次注册脚本块后,页面就显示出来了。我打开页面源码,发现只有一段注册脚本,并没有重复注册,有谁能告诉我这个原因吗???<script>
function buttonconfirm(msg)
{return window.confirm(msg);}
</script>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;namespace com.cait
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:ConfirmButton2 runat=server></{0}:ConfirmButton2>")]
public class ConfirmButton2 : Button
{
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public string ConfirmMessage // 确认对话框中提示文字
{
get
{
String msg = (String)ViewState["ConfirMessage"];
return ((msg == null) ? "您确认吗" : msg);
}
set
{
ViewState["ConfirMessage"] = value;
}
} // 在生成按钮的时候增加一个属性
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
this.Attributes.Add("onclick",
String.Format("return buttonconfirm('{0}');", this.ConfirmMessage)); base.AddAttributesToRender(writer);
} // 生成内容使用 Button 的默认生成方法,不再进行修改 // 此方法将在生成之前被调用,我们在这里进行脚本的检查和注册
protected override void OnPreRender(EventArgs e)
{ if (!this.Page.ClientScript.IsClientScriptBlockRegistered("Confirm")) {
// 加入脚本函数
string script = "<script>\r\n function buttonconfirm(msg)\r\n {return window.confirm(msg);}\r\n</script>";
this.Page.ClientScript.RegisterClientScriptBlock(
this.GetType(),
"Confirm",
script);
} base.OnPreRender(e);
}
}
}我在主页面,拖了2个 这种类型的按钮上去。。随后我就去跟踪这个OnPreRender(EventArgs e)函数,我发现,程序2次调用到了这个函数,
第一次,this.Page.ClientScript.IsClientScriptBlockRegistered("Confirm") 为false,随后就开始注册客户端脚本Confirm块了。第二次,程序再一次到了断点this.Page.ClientScript.IsClientScriptBlockRegistered("Confirm") 处,但是仍然返回false,不知道为什么会这样,再次注册脚本块后,页面就显示出来了。我打开页面源码,发现只有一段注册脚本,并没有重复注册,有谁能告诉我这个原因吗???<script>
function buttonconfirm(msg)
{return window.confirm(msg);}
</script>
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货