引子:在编写程序的过程中,我们是不是有碰到这样的情况呢?
控件位于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

3

4

5

6

7

8

9



10

11



12

13

14

15

16

17

18



19

20

21



22

23



24

25

26

27

28



29

30

31

32

33

34



35

36



37

38

39

40

41



42

43

44

45

46

47

48



49



50

51

52

53



54

55



56

57

58



59

60

61

62

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

3

4

5

6

7

8

9

10



11

12

13

14

15

16

没什么技术可言,不知道大家平时遇到这种情况是如何处理的。欢迎大家讨论。
http://www.cnblogs.com/skyover/archive/2006/09/25/bindableliteral.html