经常在论坛里看到类似这样的问题:“…如何在点击删除按钮的时候弹出个确认删除对话框”。
下面我们来自己写一个这样的自定义web服务器控件!
思路如下:
继承system.web.ui.webcontrols.button控件
增加一个属性“confirmmessage”来表示弹出确认框上面的提示信息。
在服务器控件呈现在页面之前把一段javascript写到页面
内容如下:
<script language="javascript">
<!–
function _doaspxboyconfirm()
{
return confirm("你确认删除/保存吗??")
}
//–>
</script>
查一下msdn中对于control.onprerender 方法的描述
可以得到“此方法通知服务器控件在保存视图状态和呈现内容之前,执行任何必要的预呈现步骤”.
所以我们只要在onprerender方法内 用page.registerclientscriptblock把这段javascript发送到客户端,并且给button. attributes属性内添加一个“onclick”的客户端属性对应值为: "return _doaspxboyconfirm()”.
详细情况可以查阅
ms-help://ms.vscc.2003/ms.msdnqtr.2003feb.2052/cpref/html/frlrfsystemwebuiwebcontrolswebcontrolclassattributestopic.htm
这样一个具有confirm功能的button就基本上建立起来了。
新建一个测试该控件的工程
在工具箱上点右键选择“添加/移除项”,点击浏览选择编译好的dll文件,点击确定,你会发现confirmbutton已经添加到工具箱内了
将其托到一个aspx页面内 在属性设置内给confirmmessage值为你要的弹出框内容比如“确定删除吗?”,按f5运行。
当点该按钮时会弹出一个confirm对话框询问“确定删除吗?”,如果点击确定则执行button的button_click事件,如果点击取消则不执行。
你可以查看他生成的html代码,以加深对该控件工作原理的理解
完整的代码如下:
using system;
using system.web.ui;
using system.web.ui.webcontrols;
using system.componentmodel;
using system.text;
namespace aspxboy.com.confirmbutton
{
/// <summary>
/// button点击时会弹出一个对话框要求确认
/// </summary>
public class confirmbutton : system.web.ui.webcontrols.button
{
private string _confirmmessage;
/// <summary>
/// 当客户端点击此button时弹出的提示消息筐的内容
/// </summary>
public string confirmmessage
{
get
{
return _confirmmessage;
}
set
{
_confirmmessage = value;
}
}
protected override void onprerender(system.eventargs e)
{
stringbuilder sb = new stringbuilder();
sb.append("<script language=\"javascript\">");
sb.append(system.environment.newline);
sb.append("<!–");
sb.append(system.environment.newline);
sb.append("/*——————————————–");
sb.append(system.environment.newline);
sb.append("controlname:\t\taspxboy.com.confirmbutton");
sb.append(system.environment.newline);
sb.append("authorname:\t\t\thuobazi,wumeibo");
sb.append(system.environment.newline);
sb.append("copyright:\t\t\twww.aspxboy.com");
sb.append(system.environment.newline);
sb.append("———————————————*/");
sb.append(system.environment.newline);
sb.append("function _doaspxboyconfirm()");
sb.append(system.environment.newline);
sb.append("{");
sb.append(system.environment.newline);
sb.append("return confirm(\"");
sb.append(confirmmessage);
sb.append("\")");
sb.append(system.environment.newline);
sb.append("}");
sb.append(system.environment.newline);
sb.append("//–>");
sb.append("</script>");
page.registerclientscriptblock("_doaspxboyconfirm",sb.tostring());
this.attributes.add("onclick","return _doaspxboyconfirm()");
base.onprerender(e);
}
public override void renderbegintag(htmltextwriter writer)
{
writer.writeline();
writer.write("<!——————-");
writer.write("aspxboy.com.confirmbutton start");
writer.write("\tauthorname: \thuobazi");
writer.writeline(" ———————>");
writer.write("<!——————– ");
writer.write("copyright:2004 huobazi(www.aspxboy.com)");
writer.write(" ———————");
writer.writeline(">");
base.renderbegintag(writer);
}
public override void renderendtag(htmltextwriter writer)
{
base.renderendtag(writer);
writer.writeline();
writer.write("<!——————————- ");
writer.write("aspxboy.com.confirmbutton end");
writer.write(" ——————————–");
writer.writeline(">");
writer.writeline();
}
}
}