ASP自定义控件的两种实现方法

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>
Tagged with
comments powered by Disqus