教你做一個可以彈出確認對話框的自定義Web服務器控件ConfirmButton
2024-07-21 02:24:27
供稿:網(wǎng)友
經(jīng)常在論壇里看到類似這樣的問題:“…如何在點擊刪除按鈕的時候彈出個確認刪除對話框”。
下面我們來自己寫一個這樣的自定義web服務器控件!
思路如下:
繼承system.web.ui.webcontrols.button控件
增加一個屬性“confirmmessage”來表示彈出確認框上面的提示信息。
在服務器控件呈現(xiàn)在頁面之前把一段javascript寫到頁面
內容如下:
<script language="javascript">
<!--
function _doaspxboyconfirm()
{
return confirm("你確認刪除/保存嗎??")
}
//-->
</script>
查一下msdn中對于control.onprerender 方法的描述
可以得到“此方法通知服務器控件在保存視圖狀態(tài)和呈現(xiàn)內容之前,執(zhí)行任何必要的預呈現(xiàn)步驟”.
所以我們只要在onprerender方法內 用page.registerclientscriptblock把這段javascript發(fā)送到客戶端,并且給button. attributes屬性內添加一個“onclick”的客戶端屬性對應值為: "return _doaspxboyconfirm()”.
詳細情況可以查閱
ms-help://ms.vscc.2003/ms.msdnqtr.2003feb.2052/cpref/html/frlrfsystemwebuiwebcontrolswebcontrolclassattributestopic.htm
這樣一個具有confirm功能的button就基本上建立起來了。
新建一個測試該控件的工程
在工具箱上點右鍵選擇“添加/移除項”,點擊瀏覽選擇編譯好的dll文件,點擊確定,你會發(fā)現(xiàn)confirmbutton已經(jīng)添加到工具箱內了
將其托到一個aspx頁面內 在屬性設置內給confirmmessage值為你要的彈出框內容比如“確定刪除嗎?”,按f5運行。
當點該按鈕時會彈出一個confirm對話框詢問“確定刪除嗎?”,如果點擊確定則執(zhí)行button的button_click事件,如果點擊取消則不執(zhí)行。
你可以查看他生成的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();
}
}
}