引子:在编写程序的过程中,我们是不是有碰到这样的情况呢?
控件位于Repeater,DataList,DataGrid中,但是我们需要在脚本中引用这个控件的ClientID或者UniqueName,但这时用传统的<%# ctl.ClientID %>会说找不到此控件。
这时候我们需要一个小小的控件:我叫它:BindableLiteral
看代码:
使用方式:
一、注册控件
<%@ Register Assembly="Controls" Namespace="Limited.Controls" TagPrefix="lm" %>
二、使用
没什么技术可言,不知道大家平时遇到这种情况是如何处理的 。欢迎大家讨论。
控件位于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
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 < 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 >
2 < HeaderTemplate >
3 < div id ="xToolbar" style ="overflow: visible; width: 100%; display: none;" >
4 </ div >
5 </ HeaderTemplate >
6 < ItemTemplate >
7 < 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 >
没什么技术可言,不知道大家平时遇到这种情况是如何处理的 。欢迎大家讨论。