引子:在编写程序的过程中,我们是不是有碰到这样的情况呢?
控件位于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
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.Controls9
{10
public enum eMode11
{12
UniqueName,13
ClientID,14
}15

16
public class BindableLiteral :17
Literal18
{19
[TypeConverter(typeof(ValidatedControlConverter)), IDReferenceProperty, DefaultValue("")]20
public string BindControl21
{22
get23
{24
object obj = ViewState["BindControl"];25
return obj == null ? null : (string)obj;26
}27
set28
{29
ViewState["BindControl"] = value;30
}31
}32

33
public eMode RenderMode34
{35
get36
{37
object obj = ViewState["RenderMode"];38
return obj == null ? eMode.ClientID : (eMode)obj;39
}40
set41
{42
ViewState["RenderMode"] = value;43
}44
}45

46
[Browsable(false)]47
public new string Text48
{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
else62
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>
<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>没什么技术可言,不知道大家平时遇到这种情况是如何处理的。欢迎大家讨论。


浙公网安备 33010602011771号