一个小小的实用控件
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
控件位于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
相关文章推荐
- 一个小小的实用控件。
- 一个简单实用的分页控件
- FastReport控件系列写一个小小报表界面设计工具
- 关于数据绑定的一个小小的总结:绑定数据到List类型的控件(RadioButtonList,ListBox等),双重绑定。
- 一个简单实用的跳转倒计时控件
- 一个将服务器端方法映射到客户端的小小控件
- 推荐给大家一个十分实用的java日历控件
- 在用Month Calendar控件时的一个小小经验
- 打造一个简单实用的安卓广告栏控件
- 介绍一个实用的form表单控件DG-spinner
- 一个简单实用的分页控件
- 一个适用于visual studio 2005的一个js日历控件--zhuan
- 非常非常实用的一个小技巧
- 一个不错的日期控件
- WinForm中新开一个线程操作 窗体上的控件(跨线程操作控件)
- 一个简单实用的轮播器
- 一个简单实用的数据库操作框架
- 利用Ajax技术写一个迷你留言板WEB控件
- WinForm中一个窗体调用另一个窗体的控件和事件的方法(附带源码)