• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

[ASP.NET 控件实作 Day3] 扩展现有服务器控件功能

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

相对于由无到有开发控件,继承现有现服务器控件是比较简单且实用的方式;若希望在现有的控件增加某些属性或功能,直接继承该控件下来扩展功能是最快的方式,例如「按下 Button 会弹出询问讯息」、「TextBox 设为 ReadOnly 时,可以取得前端传回的 Text 属性」这类需求,都可以直接继承原控件下来,加上我们需要的功能即可。以下我们就以一个简单的案例来说明如何继承现有服务器下来扩展功能。

一、扩展 Button 控件:按钮加上询问讯息

按下按钮执行某些动作前,有时会询问使用者是否执行该动作;例如按下删除钮,会询问使用者是否确定要执行删除的动作。当然这只需要简单的 JavaScript 就可以完成,不过相对于 .NET 的程序语言,JavaScript 是非常不易维护的客户端指令码,如果能让开发人员完全用不到 JavaScript,那何乐不为呢? 那就由 Button 控件本身提供加上询问讯息的功能就可以,相关的 JavaScript 由控件去处理。

一般要在 Button 加上询问讯息,只要在 OnClientClick 属性设定如下的 JavaScript 即可。我们的目的只是让开发人员连设定 OnClientClick 属性的 JavaScript 都省略,直接设定要询问的讯息即可,接下来我们就要开始实作这个控件。

<asp:Button ID="Button1" runat="server" Text="Button"  OnClientClick="if (confirm('確定執行嗎?')==false) {return false;}" />   

 

在 Bee.Web 项目中,加入「ASP.NET 服务器控件」,此控件继承 Button 下来命名为 TBButton (命名空间为 Bee.Web.WebControls)。在 TBButton 类别中加入 ConfirmMessage 属性,用来设定询问讯息的内容。然后在 Render 方法将询问询息的 JavaScript 设定到 OnClientClick 属性即可。

Namespace WebControls
    < _
    Description("按鈕控制項"), _
    ToolboxData("<{0}:TBButton runat=server></{0}:TBButton>") _
    > _
    Public Class TBButton
        Inherits System.Web.UI.WebControls.Button
 
        <Description("詢問訊息")> _
        Public Property ConfirmMessage() As String
            Get
                Dim sConfirmMessage As String
                sConfirmMessage = CStr(ViewState("ConfirmMessage"))
                If sConfirmMessage Is Nothing Then
                    Return String.Empty
                Else
                    Return sConfirmMessage
                End If
            End Get
            Set(ByVal value As String)
                ViewState("ConfirmMessage") = value
            End Set
        End Property
 
        ''' <summary>
        ''' 覆寫 Render 方法。
        ''' </summary>
        Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
            Dim sScript As String
            Dim sConfirm As String
 
            '若有設定 ConfirmMessage 屬性,則在 OnClientClick 加入詢問訊息的 JavaScript
            If Me.ConfirmMessage <> String.Empty Then
                sScript = Me.OnClientClick
                '詢問訊息的 JavaScript
                sConfirm = String.Format("if (confirm('{0}')==false) {{return false;}}", Me.ConfirmMessage)
                If sScript = String.Empty Then
                    Me.OnClientClick = sConfirm
                Else
                    Me.OnClientClick = sConfirm & sScript
                End If
            End If
            MyBase.Render(writer)
        End Sub
 
    End Class
End Namespace

 

将 TBButton 拖曳到测试页面,设定 ConfirmMessage 属性。

<bee:TBButton ID="TBButton1" runat="server" ConfirmMessage="確定刪除此筆資料嗎?" Text="刪除" />

 

執行結果如下。

 

二、结语

笔者在开发 ASP.NET 的应用程序过程中,通常会习惯把所有现有控件继承下来,无论目前需不需要扩展控件功能。这种方式对于开发大型系统是相当有帮助的,因为无法预期在系统开发的过程中会不会因为某些状况,而临时需要扩展控件的功能,所以就先全部继承下来以备不时之需,也为未来保留修改的弹性。

 

三、相关连结

扩展 CommandField 类别 - 删除提示讯息
按钮加上询问讯息

 

备注:本文同步发布于「第一届iT邦帮忙铁人赛」,如果你觉得这篇文章对您有帮助,记得连上去推鉴此文增加人气 ^^
http://ithelp.ithome.com.tw/question/10011562


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
asp.netcorewebapi版本控控制发布时间:2022-07-10
下一篇:
ASP.Net WebForm温故知新学习笔记:二、ViewState与UpdatePanel探秘发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap