你要开发的是用户控件,这时比较简单的,看下面的文档:
 演练:创建 Web 用户控件请参见
开发 ASP.NET 服务器控件 | Web 控件库模板 | 关于 Web 用户控件与 Web 自定义控件的建议 | 介绍 Web 用户控件 | 演练:将 Web 窗体页转换为用户控件
Web 用户控件是您可以根据应用程序的需要使用与编写 Web 窗体页相同的编程技术定义的控件。当需要创建可再次使用的部分 UI(它们将在整个应用程序中使用)时,您可以创建 Web 用户控件。用户控件可以包含 HTML、服务器控件和事件处理逻辑。与编译的控件类似,它可以公开承载 Web 窗体页可设置的属性。注意 请不要将 Web 用户控件与 Web 自定义控件混淆。有关更多信息,请参阅关于 Web 用户控件与 Web 自定义控件的建议。
创建用户控件的步骤与创建 Web 窗体页的步骤非常相似。通过在设计图面上排列 ASP.NET 服务器控件、HTML 和静态文本;绑定数据;以及编写代码来处理控件引发的事件,以可视的方式设计 UI。像 Web 窗体页一样,用户控件可以处理页处理事件,例如 Page_Load。本演练创建一个菜单选择控件,该控件将所选的项传递回 URL 查询字符串中的页。当应用程序使用单个页显示特定种类的数据,但您还要提供数据的筛选视图时,这种类型的定位很有用。例如,您可能具有一个 Sales 页,该页显示的数据可以根据区域进行筛选。通过单击按钮(该按钮将筛选器当做查询字符串元素放入 URL 中),用户可以直接定位到要查看的数据,如本示例将所显示的信息限制在东北部区域的销售数据:http://sales/salesreport.aspx?region=northeast
在本演练中,您将创建一个控件,该控件将信息类别显示为 Web 窗体页上的菜单。它获取类别并从页上的数据源(在本例中为一个字符串数组)动态填充菜单。当单击一个菜单项时,该菜单项在数组中的索引号作为一个参数添加到 URL 中。该 URL 被传递到承载页,承载页接受该参数并将与该索引号关联的信息显示在一个 Label 控件中;在本例中,该信息便是同一个字符串数组中的类别名称。您将执行以下步骤来创建用户控件: 在设计器中打开新的用户控件 
为该用户控件设置数据绑定表达式 
将数据源和选择公开为 Web 窗体页的属性 
初始化用户控件 
您还将执行以下操作在 Web 窗体页上使用控件: 将用户控件添加到页 
创建该用户控件的数据源 
设置该用户控件的属性 
在 Web 窗体页上根据用户控件的选择提供筛选器表示 
运行 Web 窗体页并测试控件 
完成后,您的页如下所示:创建用户控件
第一步是启动一个新项目并向其添加一个 Web 用户控件。创建 Web 用户控件 在“文件”菜单上指向“新建”,然后单击“项目”。 
即会出现“新建项目”对话框。 在“项目类型”窗格中选择“Visual Basic 项目”或“Visual C# 项目”。在“模板”窗格中选择“ASP.NET Web 应用程序”,然后单击“确定”。 
将在默认位置创建一个具有默认名称的新项目。 关闭刚创建的 .aspx 文件。本演练中不需要该文件。 
在“项目”菜单中单击“添加 Web 用户控件”。 
出现“添加新项”对话框,已选中“Web 用户控件”。 在“名称”框中键入 menu.ascx,然后单击“打开”。该用户控件在设计器中打开。 
若要在用户控件中显示数据,请将一个 DataList 控件添加到设计图面。该 DataList 控件从数据源取每一项,根据您指定的属性对每项和整个数据列表进行格式设置,然后显示项的列表。因为列表是基于数据源动态生成的,所以该控件便于再次使用。添加 DataList 控件并设置其属性 从工具箱的“Web 窗体”选项卡,将一个 DataList 控件添加到 menu.ascx 页。 
该控件将通过显示一组可用选项的列表填充菜单,它将从在承载 Web 窗体页创建的数组中获取这些可用选项。为了使这些项以菜单格式“Item1 |Item2 |Item3”显示在页上,必须正确地设置 DataList 控件的显示属性。 确保选中了 DataList 控件,然后单击“属性”窗口底部的“属性生成器”以打开“DataList1 属性”对话框。 
在“常规”页上“重复布局”组中,将“方向”设置为“水平”。 
在“格式”页上“对象”列表中,展开“项”节点并选择“选定项”。在“外观”组中选择“粗体”,然后单击“确定”。 
该设置将使所选的菜单项以粗体字母显示。 右击“DataList”控件以显示快捷菜单,然后指向“编辑模板”并单击“分隔符模板”。 
将插入点放置在“分隔符”模板的空行并键入“|”字符。 
该字符将用于在列出菜单项时将它们分开。 显示在 DataList 菜单中的每个数据项都将有一个数组索引值,其下限为 0。您将使用该数字通过将其作为一个参数添加到传递到承载页的 URL 来请求与该菜单项关联的信息。若要生成 URL,请使用 HyperLink 控件将数据项的格式设置为超级链接,然后将该控件绑定到数据源。然后,您可以设计绑定表达式,该表达式为每个超级链接动态生成适当的请求字符串。添加 HyperLink 控件并设置绑定表达式 右击 DataList 控件,然后指向“编辑模板”并单击“项模板”。DataList 控件中又多出现几个模板字段。 
用户应该能够单击菜单项以检索与该菜单项相关的数据。因此,每项都应该是一个超级链接。 从工具箱的“Web 窗体”选项卡,将一个 HyperLink 控件拖到标题 ItemTemplate 下 DataList 控件中的空行。 
确保选择了 HyperLink 控件,然后选择“属性”窗口中的“(DataBindings)”并单击值字段中的省略号按钮。 
“数据绑定”对话框出现。“可绑定属性”列表中默认选择 Text 属性。 在“Text 绑定”组中“简单绑定”下,展开“容器”节点并选择“DataItem”。 
将会将每个超级链接的 Text 属性绑定到容器中的数据项,在本例中容器是 DataList 控件。DataList 控件将从在承载 Web 窗体页中创建的数组中接收其数据项。 在“可绑定属性”列表中,选择 NavigateUrl 属性。 
注意 当单击 NavigateUrl 属性时,Text 属性旁边的图标更改以显示它是数据绑定的。
在“NavigateUrl 绑定”组中“简单绑定”下,选择“ItemIndex”。 
这是数组中数据项的索引号。要将该数字正确地追加到 URL 以便 URL 检索位于该索引号位置的数据项,您必须将其格式化为参数。将该参数命名为“category”。 在“格式”框中,输入该字符串(请注意 0 周围的花括号): 
?category={0} 
现在您必须完成该 URL 以便它指向承载 Web 窗体页。 单击“自定义绑定表达式”并将此代码添加到几乎完成的数据绑定表达式的开头: 
Request.Path + 
完成的自定义数据绑定表达式应该是: Request.Path + DataBinder.Eval(Container, "ItemIndex", "?category={0}")
单击“确定”关闭“数据绑定”对话框。 
根据与该数组号关联的链接中的信息,您输入的数据绑定表达式包含在运行时生成 URL 的语法。当用户控件运行时,按以下方式计算该表达式: 首先,用当前页的名称替换 Request.Path。此方法允许在任何页上使用您的菜单控件,而不管它是如何命名的。有关更多信息,请参阅 HttpRequest.Path 属性。 
然后,DataBinder.Eval 方法采用该项的索引号并用它代替格式字符串中的“{0}”标记。有关更多信息,请参阅 DataBinder.Eval 方法。 
例如,如果承载页名为 MyPage.aspx,该项的索引是 1,则生成的 URL 将是:MyPage.aspx?category=1
向 Web 窗体页公开属性
您可以将 DataList 控件绑定到许多不同类型的数据源。为了简单起见,本演练将 DataList 控件绑定到简单的字符串数组,该数组通过用户控件公开的属性从 Web 窗体页传递到用户控件。 声明数组和选择属性 按 F7 键从“设计”视图切换到代码隐藏文件。 
为字符串数组添加一个公共的类级别声明,然后将其命名为 values。 
该数组将保留数据项的列表。 同样,将 selection 声明为 Integer 并将其初始化为 -1。 
该变量将保留用户选择的菜单项的索引值。因为 -1 不是数组中的索引值,所以初始化时,不会分配给该变量一个索引值。 代码前面的部分如下所示: ' Visual Basic
Public MustInherit Class menu
   Inherits System.Web.UI.UserControl
   Protected WithEvents DataList1 As System.Web.UI.WebControls.DataList
   Public values() As String
   Public selection As Integer = -1// C#
public abstract class menu : System.Web.UI.UserControl
{
   protected System.Web.UI.WebControls.DataList DataList1;
   public string[] values;
   public int selection = -1;
初始化控件
既已建立了路径和格式,您需要添加代码来初始化控件和数据之间的连接。使用该页加载事件来进行此初始化。 在 Page_Load 过程中,将 values 设置为 DataList 控件的 DataSource 属性。 
将 selection 设置为 DataList 控件的 SelectedIndex 属性。 
调用 DataList 控件的 DataBind() 方法创建 DataList 项。 
您的 Page_Load 过程如下所示: ' Visual Basic
Private Sub Page_Load(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles MyBase.Load
   DataList1.DataSource = values
   DataList1.SelectedIndex = selection
   DataList1.DataBind()
End Sub// C#
private void Page_Load(object sender, System.EventArgs e)
{
   DataList1.DataSource = values;
   DataList1.SelectedIndex = selection;
   DataList1.DataBind();
}

解决方案 »

  1.   

    保存和关闭该控件。 
    使用用户控件
    既已创建了用户控件,您将在 Web 窗体页中实际使用它。有可能在多个页上使用控件并将其绑定到每页上不同的数据。但是,在本演练中,您只在一个名为 MyPage.aspx 的页上使用用户控件。将用户控件添加到 Web 窗体页 在“项目”菜单上,单击“添加 Web 窗体”。 
    “添加新项”对话框出现,选中了“Web 窗体”。 将 Name 更改为 MyPage.aspx,然后单击“打开”。 
    新的 Web 窗体页在“设计”视图中打开。 在解决方案资源管理器中选择 menu.ascx 文件并将其拖到您的页上。它将显示为用户控件,其 ID 为 Menu1。 
    用户控件将以显示其类型和名称的标记的形式显示在页上;页中没有该用户控件的图形显示,因为在运行页之前未完全编译该类型的控件。 Web 窗体页上的用户控件标志符号  从工具箱的“Web 窗体”选项卡中,将一个 Label 控件添加到该页。 
    该控件用于显示与选定的菜单项关联的信息。 保存文件。 
    因为 Visual Studio 不会自动将用户控件的声明添加到代码,所以下一步是手动添加声明。添加用户控件的代码隐藏声明 按 F7 键从“设计”视图切换到代码隐藏文件。 
    在“声明”区域,添加一行将用户控件 Menu1 声明为菜单。 
    ' Visual Basic
    Public Class MyPage
       Inherits System.Web.UI.Page
       Protected WithEvents Label1 As System.Web.UI.WebControls.Label
       Protected Menu1 As menu// C#
    public class MyPage : System.Web.UI.Page
    {
       protected System.Web.UI.WebControls.Label Label1;
       protected menu Menu1;
    既已具有了用户控件的代码声明,您必须以编程方式设置其属性。创建用户控件的数据源 在 Web 窗体页的 Page_Load 方法中,声明一个字符串数组并将其命名为 values。这是将由您创建的用户控件调用的数组。用三项(“News”、“Events”和“Reference”)填充该数组。 
    将该数组分配给 Menu1 用户控件的 values 属性。 
    您的代码如下所示: ' Visual Basic    
    ' set datasource for menu
    Dim values() As String = New String() {"News", "Events", "Reference"}
    Menu1.values = values// C#
    //set datasource for menu
    String[] values = new String[]{"News", "Events", "Reference"};
    Menu1.values = values;
    若要查找菜单中选择了哪一项,请检查当为 Hyperlink 控件创建自定义绑定表达式时设置的“category”参数。捕获用户控件选择 在 Page_Load 方法中,添加一行代码从 URL 查询字符串复制当前选择(如果有的话): 
    ' Visual Basic
    Dim selectionId As String = Request.Params("category")// C#
    String selectionId = Request.Params["category"];
    如果设置了选择,则通过控件的 selection 属性将其传递到用户控件并设置 Label 控件的文本以指示当前选择。Web 窗体页可以使用该选择信息来筛选它显示的视图。 
    ' Visual Basic
    If (selectionId <> "") Then
       Dim SelectIndex As Integer = CInt(selectionId)
       Menu1.selection = SelectIndex
       Label1.Text = "Current selection is: " & values(SelectIndex)
    End If// C#
    if(selectionId != "")
       {
          int SelectIndex = Convert.ToInt16(selectionId);
          Menu1.selection = SelectIndex;
          Label1.Text = "Current selection is: " + values[SelectIndex];
       }
    这完成了该 Web 窗体页。整个 Page_Load 过程如下所示: ' Visual Basic
    Dim values() As String = New String() {"news", "events", "reference"}
    Menu1.values = values
    Dim selectionId As String = Request.Params("category")
    If (selectionId <> "") Then
       Dim SelectIndex As Integer = CInt(selectionId)
       Menu1.selection = SelectIndex
       Label1.Text = "Current selection is: " & values(SelectIndex)
    End If// C#
    String[] values = new String[]{"News", "Events", "Reference"};
    Menu1.values = values;
    String selectionId = Request.Params["category"];
    if(selectionId != "")
       {
          int SelectIndex = Convert.ToInt16(selectionId);
          Menu1.selection = SelectIndex;
          Label1.Text = "Current selection is: " + values[SelectIndex];
       }
    保存和关闭该页。 
    测试 Web 窗体页
    您现在可以测试页以查看菜单的功能。 测试 Web 窗体页 在解决方案资源管理器中右击 MyPage.aspx 并在快捷菜单上选择“设为起始页”。 
    按 F5 键运行 MyPage.aspx 并测试用户控件。单击每个菜单选择来测试它们的功能。 
    用户控件将从 Web 窗体页中数组传递的每个字符串显示为一个单独的链接。您将 DataList 控件的 DataSource 属性设置为数组并使用 DataList 为 DataSource 属性中的每项呈现一个超级链接。DataList 控件还将不同的可视样式应用于所选的链接。
      

  2.   

    例子:http://www.codeproject.com/cs/miscctrl/first_control.asp
    更多例子:http://www.codeproject.com/cs/miscctrl