一个小小的实用控件

本文介绍了一种名为BindableLiteral的自定义ASP.NET控件,该控件可在Repeater、DataList或DataGrid等容器内引用控件的ClientID或UniqueName,解决了传统方法无法获取这些属性的问题。

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

引子:在编写程序的过程中,我们是不是有碰到这样的情况呢?
控件位于Repeater,DataList,DataGrid中,但是我们需要在脚本中引用这个控件的ClientID或者UniqueName,但这时用传统的<%# ctl.ClientID %>会说找不到此控件。

这时候我们需要一个小小的控件:我叫它:BindableLiteral
看代码:

 1 using  System;
 2 using  System.Collections.Generic;
 3 using  System.Text;
 4 using  System.Web.UI.WebControls;
 5 using  System.ComponentModel;
 6 using  System.Web.UI;
 7
 8 namespace  Limited.Controls
 9 {
10    public enum eMode
11    {
12        UniqueName,
13        ClientID,
14    }

15
16    public class BindableLiteral :
17        Literal
18    {
19        [TypeConverter(typeof(ValidatedControlConverter)), IDReferenceProperty, DefaultValue("")]
20        public string BindControl
21        {
22            get
23            {
24                object obj = ViewState["BindControl"];
25                return obj == null ? null : (string)obj;
26            }

27            set
28            {
29                ViewState["BindControl"= value;
30            }

31        }

32
33        public eMode RenderMode
34        {
35            get
36            {
37                object obj = ViewState["RenderMode"];
38                return obj == null ? eMode.ClientID : (eMode)obj;
39            }

40            set
41            {
42                ViewState["RenderMode"= value;
43            }

44        }

45
46        [Browsable(false)]
47        public new string Text
48        {
49            set { }
50        }

51
52        protected override void Render(HtmlTextWriter writer)
53        {
54            if (!string.IsNullOrEmpty(BindControl))
55            {
56                Control ctl = this.NamingContainer.FindControl(BindControl);
57                if (ctl != null)
58                {
59                    if (RenderMode == eMode.ClientID)
60                        writer.Write(ctl.ClientID);
61                    else
62                        writer.Write(ctl.UniqueID);
63                }

64            }

65        }

66    }

67}

68
69

使用方式:
一、注册控件
<%@ Register Assembly="Controls" Namespace="Limited.Controls" TagPrefix="lm" %>

二、使用
 1 < asp:Repeater  ID ="rptPageArticle"  runat ="server"  OnItemCommand ="rptPageArticle_ItemCommand" >
 2                              < HeaderTemplate >
 3                                  < div  id ="xToolbar"  style ="overflow: visible; width: 100%; display: none;" >
 4                                  </ div >
 5                              </ HeaderTemplate >
 6                              < ItemTemplate >
 7                                  &nbsp; < asp:TextBox  ID ="txtPageContent"  runat ="server"  TextMode ="multiLine"  Width ="96%"
 8                                     Text ='<%#  DataBinder.Eval(Container.DataItem,"PageContent") % > ' />
 9
10                                  < script  type ="text/javascript" >
11    var oFCKeditor = new FCKeditor( '<lm:BindableLiteral BindControl="txtPageContent" runat="server" RenderMode="UniqueName" />' ) ;
12    oFCKeditor.ReplaceTextarea() ;    
13                                
</ script >
14
15                              </ ItemTemplate >
16                          </ asp:Repeater >



没什么技术可言,不知道大家平时遇到这种情况是如何处理的。欢迎大家讨论。 

 

http://www.cnblogs.com/skyover/archive/2006/09/25/bindableliteral.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值