一个小小的实用控件。

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

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

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

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

27InBlock.gif            set
28ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
29InBlock.gif                ViewState["BindControl"= value;
30ExpandedSubBlockEnd.gif            }

31ExpandedSubBlockEnd.gif        }

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

40InBlock.gif            set
41ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
42InBlock.gif                ViewState["RenderMode"= value;
43ExpandedSubBlockEnd.gif            }

44ExpandedSubBlockEnd.gif        }

45InBlock.gif
46InBlock.gif        [Browsable(false)]
47InBlock.gif        public new string Text
48ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
49ExpandedSubBlockStart.gifContractedSubBlock.gif            set dot.gif{ }
50ExpandedSubBlockEnd.gif        }

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

64ExpandedSubBlockEnd.gif            }

65ExpandedSubBlockEnd.gif        }

66ExpandedSubBlockEnd.gif    }

67ExpandedBlockEnd.gif}

68 None.gif
69 None.gif

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

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


没什么技术可言,不知道大家平时遇到这种情况是如何处理的 。欢迎大家讨论
posted on 2006-09-25 19:14 嘻哈呵嘿 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/skyover/archive/2006/09/25/BindableLiteral.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值