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