AlertButton

该博客为转载内容,转载自https://www.cnblogs.com/sadier/archive/2005/05/10/152460.html ,原内容可能与UI相关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

None.gif 
None.gif      在.Net  Web应用程序开发中, 我们希望用户在做一个重要的操作时, 能够询问或警告用户.  或者希望我们有这么一个简单实用的控件, 能在用户确定后引发一个服务端的事件.
None.gif
None.gif这个控件的原理很简单,主要是实现IPostBackEventHandler接口和调用Page.GetPostBackEventReference(
this, eventArgument),  实现对客户端__doPostBack方法的调用, 引发服务端的事件
None.gif
None.gif而以下这段关键代码是实现功能的核心:
None.gif
None.gif    
if(AlertString != ""//仅在用户确认后调用客户端的__DostPostBack, 引发服务端事件 
None.gif
    { 
None.gif     Action 
= if(window.confirm(\'"  + AlertString + "')==true){"
None.gif     Action += Page.GetPostBackEventReference(this, 
"Click"); 
None.gif     Action += 
";}"
None.gif    } 
None.gif
None.gif全部代码:
None.gif
None.gifusing System; 
None.gifusing System.Web.UI; 
None.gifusing System.Web.UI.WebControls; 
None.gifusing System.ComponentModel; 
None.gif
None.gifnamespace Booksir.WebControls 
None.gif
None.gif /// <summary> 
None.gif /// AlertButton 的摘要说明。 
None.gif /// </summary> 
None.gif [ 
None.gif DefaultProperty(
"Text"), 
None.gif ToolboxData(
"<{0}:AlertButton runat=server></{0}:AlertButton>"), 
None.gif System.ComponentModel.DefaultEvent(
"Click"), 
None.gif ] 
None.gif public class AlertButton : System.Web.UI.WebControls.WebControl, IPostBackEventHandler 
None.gif { 
None.gif  private ViewStateBag StateBag; 
None.gif
None.gif  public AlertButton() 
None.gif  { 
None.gif   StateBag = new ViewStateBag(this.ViewState); 
None.gif  } 
None.gif
None.gif  public event EventHandler Click; //事件句柄
None.gif
None.gif  public enum AppearanceEnum 
None.gif  { 
None.gif   Button, 
None.gif   ImageButton, 
None.gif  } 
None.gif
None.gif  /// <summary> 
None.gif  /// 按钮的外观模式 
None.gif  /// </summary> 
None.gif  [ 
None.gif  Bindable(false), 
None.gif  Category(
"Appearance"), 
None.gif  DefaultValue(AppearanceEnum.Button), 
None.gif  Description(
"按钮的外观模式"), 
None.gif  ] 
None.gif  public AppearanceEnum Appearance 
None.gif  { 
None.gif   get 
None.gif   { 
None.gif    object obj; 
None.gif    obj = ViewState[
"Appearance"]; 
None.gif    if(obj == null) 
None.gif    { 
None.gif     Appearance = AppearanceEnum.Button; 
None.gif     return AppearanceEnum.Button; 
None.gif    } 
None.gif    return (AppearanceEnum)obj; 
None.gif   } 
None.gif   set 
None.gif   { 
None.gif    ViewState[
"Appearance"] = value; 
None.gif   } 
None.gif  } 
None.gif
None.gif  /// <summary> 
None.gif  /// 在DefaultValue为非常量值的情况下,可以用Resetdot.gif来重置属性的默认值 
None.gif  /// </summary> 
None.gif  void ResetAppearance() 
None.gif  { 
None.gif   Appearance = AppearanceEnum.Button; 
None.gif  } 
None.gif
None.gif  /// <summary> 
None.gif  /// 该方法的存在使系统在属性为默认值不提交属性赋值代码 
None.gif  /// </summary> 
None.gif  /// <returns></returns> 
None.gif  bool ShouldSerializeAppearance() 
None.gif  { 
None.gif   return Appearance != AppearanceEnum.Button; 
None.gif  } 
None.gif
None.gif  [ 
None.gif  Bindable(true), 
None.gif  Category(
"Appearance"), 
None.gif  DefaultValue(
""
None.gif  ] 
None.gif  public string Text 
None.gif  { 
None.gif   get 
None.gif   { 
None.gif    return StateBag.GetString(
"Text", this.ID); 
None.gif   } 
None.gif
None.gif   set 
None.gif   { 
None.gif    ViewState[
"Text"] = value; 
None.gif   } 
None.gif  } 
None.gif
None.gif  /// <summary> 
None.gif  /// 在执行动作前的提示 
None.gif  /// </summary> 
None.gif  [ 
None.gif  Bindable(true), 
None.gif  Category(
"Appearance"), 
None.gif  DefaultValue(
""), 
None.gif  Description(
"在执行动作前的提示"), 
None.gif  ] 
None.gif  public string AlertString 
None.gif  { 
None.gif   get 
None.gif   { 
None.gif    return StateBag.GetString(
"AlertString""是否开始执行?"); 
None.gif   } 
None.gif   set 
None.gif   { 
None.gif    ViewState[
"AlertString"] = value; 
None.gif   } 
None.gif  } 
None.gif
None.gif  /// <summary> 
None.gif  /// 按钮可用时的Image 
None.gif  /// </summary> 
None.gif  [ 
None.gif  Description(
"按钮可用时的Image"), 
None.gif  Category(
"Appearance"), 
None.gif  Editor(typeof(System.Web.UI.Design.UrlEditor), typeof(System.Drawing.Design.UITypeEditor)), 
None.gif  ] 
None.gif  public string EnabledImage 
None.gif  { 
None.gif   get 
None.gif   { 
None.gif    return StateBag.GetString(
"EnabledImage"""); 
None.gif   } 
None.gif   set 
None.gif   { 
None.gif    ViewState[
"EnabledImage"] = value; 
None.gif   } 
None.gif  } 
None.gif
None.gif  /// <summary> 
None.gif  /// 按钮不可用时的Image 
None.gif  /// </summary> 
None.gif  [ 
None.gif  Description(
"按钮不可用时的Image"), 
None.gif  Category(
"Appearance"), 
None.gif  Editor(typeof(System.Web.UI.Design.UrlEditor), typeof(System.Drawing.Design.UITypeEditor)), 
None.gif  ] 
None.gif  public string DisabledImage 
None.gif  { 
None.gif   get 
None.gif   { 
None.gif    return StateBag.GetString(
"DisabledImage"""); 
None.gif   } 
None.gif   set 
None.gif   { 
None.gif    ViewState[
"DisabledImage"] = value; 
None.gif   } 
None.gif  } 
None.gif
None.gif  /// <summary> 
None.gif  /// 将此控件呈现给指定的输出参数。 
None.gif  /// </summary> 
None.gif  /// <param name=
"output"> 要写出到的 HTML 编写器 </param> 
None.gif  protected override void Render(HtmlTextWriter output) 
None.gif  { 
None.gif   if(Appearance == AppearanceEnum.Button) 
None.gif    output.Write(GetButtonHtml()); 
None.gif   else 
None.gif    output.Write(GetImageButtonHtml()); 
None.gif  } 
None.gif
None.gif  /// <summary> 
None.gif  /// 获取呈现Button时的Html 
None.gif  /// </summary> 
None.gif  /// <returns></returns> 
None.gif  private string GetButtonHtml() 
None.gif  { 
None.gif   const string ButtonTag = 
"<input type=button value='{0}' onclick=\"{1}\" style=\"{2}\"{3} title='{4}'>"
None.gif   string sHtml; 
None.gif   string Action; 
None.gif   string Style = 
"width:{0};height:{1};"
None.gif   if(AlertString != 
""
None.gif   { 
None.gif    Action = if(window.confirm(\'
"  + AlertString + "')==true){"
None.gif    Action 
+= Page.GetPostBackEventReference(this"Click"); 
None.gif    Action 
+= ";}"
None.gif   } 
None.gif   
else 
None.gif    Action 
= " + Page.GetPostBackEventReference(this, "Click"); 
None.gif
None.gif   Style = String.Format 
None.gif    ( 
None.gif    Style, 
None.gif    this.Width.ToString(), 
None.gif    this.Height.ToString() 
None.gif    ); 
None.gif   Style += this.Attributes[
"Style"]; 
None.gif   sHtml = String.Format 
None.gif    ( 
None.gif    ButtonTag, 
None.gif    Text, 
None.gif    Action, 
None.gif    Style, 
None.gif    Enabled ? 
"" : " disabled"
None.gif    this.ToolTip 
None.gif    ); 
None.gif   return sHtml; 
None.gif  } 
None.gif
None.gif  /// <summary> 
None.gif  /// 获取呈现ImageButton时的Html 
None.gif  /// </summary> 
None.gif  /// <returns></returns> 
None.gif  private string GetImageButtonHtml() 
None.gif  { 
None.gif   const string LinkTag = 
"<a onclick=\"{0}\" title='{1}' style=\"{2}\">{3}</a>"
None.gif   const string ImgTag = 
"<img src='{0}' border=0>"
None.gif   string sHtml; 
None.gif   string Action; 
None.gif   string Image; 
None.gif   string Style; 
None.gif
None.gif   if(this.Enabled) 
None.gif   { 
None.gif    if(AlertString != 
"") //仅在用户确认后调用客户端的__DostPostBack, 引发服务端事件 
None.gif    { 
None.gif     Action = if(window.confirm(\'
"  + AlertString + "')==true){"
None.gif     Action 
+= Page.GetPostBackEventReference(this"Click"); 
None.gif     Action 
+= ";}"
None.gif    } 
None.gif    
else 
None.gif     Action 
= " + Page.GetPostBackEventReference(this, "Click"); 
None.gif    if(EnabledImage != 
""
None.gif     Image = String.Format(ImgTag, EnabledImage); 
None.gif    else 
None.gif     Image = Text; 
None.gif   } 
None.gif   else 
None.gif   { 
None.gif    Action = void()
"
None.gif    
if(DisabledImage != ""
None.gif     Image 
= String.Format(ImgTag, DisabledImage); 
None.gif    
else 
None.gif     Image 
= Text; 
None.gif   } 
None.gif   Style 
= "cursor:hand;"
None.gif   Style 
+= this.Attributes["Style"]; 
None.gif   sHtml 
= String.Format 
None.gif    ( 
None.gif    LinkTag, 
None.gif    Action, 
None.gif    
this.ToolTip, 
None.gif    Style, 
None.gif    Image 
None.gif    ); 
None.gif   
return sHtml; 
None.gif  } 
None.gif
None.gif  protected virtual 
void OnClick() 
None.gif  { 
None.gif   
if(Click != null
None.gif    Click(
this, EventArgs.Empty); 
None.gif  } 
None.gif
None.gif  public 
void RaisePostBackEvent(string eventArgument) 
None.gif  { 
None.gif   
if(eventArgument == "Click"
None.gif    OnClick(); 
None.gif  } 
None.gif } 
None.gif
None.gif 
None.gif 
None.gif 
None.gif

转载于:https://www.cnblogs.com/sadier/archive/2005/05/10/152460.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值