1、在HTML中直接调用后台CS代码中的protected成员变量
自定义控件类的HTML代码:
1@ Control Language="c#" AutoEventWireup="false" Codebehind="MyWebUserControl.ascx.cs" Inherits="WebTestRollback.MyWebUserControl" TargetSchema=" http://schemas.microsoft.com/intellisense/ie5"% >
<table <tr="" ```="" bgcolor="#0099ff" width="100">
1
2IDictionaryEnumerator objEnumerator = m_htMenu .GetEnumerator();
3while (objEnumerator.MoveNext())
4{
}
1<td></td>
2
3</table>
自定义控件类CS代码:
namespace WebTestRollback
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Collections;
///
1<summary>
2/// </summary>
public class MyWebUserControl : System.Web.UI.UserControl
{
protected Hashtable m_htMenu = new Hashtable();
private void Page_Load(object sender, System.EventArgs e)
{
}
public void AddMenu(string strName,string strLink)
{
m_htMenu.Add(strName,strLink);
}
}
}
2、在自定义控件类中重写Render方法(),此方法不需要控件的HTML代码,只需在Render方法中变相的添加HTML代码,控件的CS代码如下:
namespace WebTestRollback
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Collections;
///
1<summary>
2/// </summary>
public class SubWebUserControl : System.Web.UI.UserControl
{
protected Hashtable m_htMenu = new Hashtable();
private void Page_Load(object sender, System.EventArgs e)
{
}
public void AddMenu(string strName,string strLink)
{
m_htMenu.Add(strName,strLink);
}
protected override void Render (System.Web.UI.HtmlTextWriter writer)
{
base.Render (writer);
writer.Write( @"
1<table>
2<tr>");
3IDictionaryEnumerator objEnumerator = m_htMenu.GetEnumerator();
4while (objEnumerator.MoveNext())
5{
6writer.Write( "<td><a "\"="" (string)objenumerator.value="" +="" \+="" href='\""'>"
7\+ (string)objEnumerator.Key
8\+ "</a></td>");
9}
10writer.Write(@" <tr> <table>");
11}
12}
13}
14
15
16
17两种方法对于自定义控件用户是透明的,使用方法上没有任何区别:
18
19自定义控件 用户 HTML代码:
@ Page language="c#" Codebehind="TestLogin.aspx.cs" AutoEventWireup="false" Inherits="WebTestRollback.TestLogin"
@ Register TagPrefix="TT" TagName="CC" Src="MyWebUserControl.ascx"
@ Register TagPrefix="T2" TagName="C2" Src="SubWebUserControl.ascx"
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
2
3<html>
4<head>
5<title>TestLogin</title>
6<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR"/>
7<meta content="C#" name="CODE_LANGUAGE"/>
8<meta content="JavaScript" name="vs_defaultClientScript"/>
9<meta content=" http://schemas.microsoft.com/intellisense/ie5 " name="vs_targetSchema"/>
10</head>
11<body bgcolor="#33cccc" leftmargin="0" ms_positioning="GridLayout" rightmargin="0" topmargin="0">
12<form id="Form1" method="post" runat="server">
13<tt:cc id="m_TTCC" runat="server"></tt:cc>
14<t2:c2 id="m_T2C2" runat="server"></t2:c2>
15</form>
16</body>
17</html>
18
19
20自定义控件 用户 CS代码:
21
22using System;
23using System.Collections;
24using System.ComponentModel;
25using System.Data;
26using System.Drawing;
27using System.Web;
28using System.Web.SessionState;
29using System.Web.UI;
30using System.Web.UI.WebControls;
31using System.Web.UI.HtmlControls;
32
33namespace WebTestRollback
34{
35/// <summary>
36/// </summary>
37public class TestLogin : System.Web.UI.Page
38{
39public MyWebUserControl m_TTCC = new MyWebUserControl();
40public SubWebUserControl m_T2C2 = new SubWebUserControl();
41
42
43private void Page_Load(object sender, System.EventArgs e)
44{
45m_TTCC.AddMenu("File","news.sohu.com");
46m_TTCC.AddMenu("Edit","hotmail.com");
47
48m_T2C2.AddMenu("Project","project.com");
49m_T2C2.AddMenu("Built","built.com");
50}
51
52}
53}</table></tr></tr></table>