您的位置:首页 > 其它

一个小小的实用控件

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

 <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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: