返回首页
当前位置: 主页 > 网络编程 > .Net实例教程 >

ASP.NET-自定义控件

时间:2020-01-16 16:01来源:知行网www.zhixing123.cn 编辑:麦田守望者

 ASP.NET允许用户创建控件。这些用户定义的控件分为以下几类:

  • 用户控件
  • 自定义控件

用户控件

用户控件的行为类似于微型ASP.NET页面或Web表单,许多其他页面也可以使用它。这些是从System.Web.UI.UserControl类派生的。这些控件具有以下特征:

  • 它们的扩展名为.ascx。
  • 它们可能不包含任何<html>,<body>或<form>标记。
  • 他们有一个Control指令而不是Page指令。

为了理解这个概念,让我们创建一个简单的用户控件,该控件将用作网页的页脚。要创建和使用用户控件,请执行以下步骤:

  • 创建一个新的Web应用程序。
  • 右键单击解决方案资源管理器上的项目文件夹,然后选择“添加新项”。新增项目
  • 从“添加新项”对话框中选择“ Web用户控件”,并将其命名为footer.ascx。最初,footer.ascx仅包含一个Control指令。

    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="footer.ascx.cs"     Inherits="customcontroldemo.footer" %>
  • 将以下代码添加到文件中:

    <table>    <tr>       <td align="center"> Copyright ©2010 TutorialPoints Ltd.</td>    </tr>     <tr>       <td align="center"> Location: Hyderabad, A.P </td>    </tr> </table>

要将用户控件添加到您的网页,必须将Register指令和用户控件的实例添加到该页面。以下代码显示了内容文件:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="customcontroldemo._Default" %>     <%@ Register Src="~/footer.ascx" TagName="footer" TagPrefix="Tfooter" %>  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html xmlns="http://www.w3.org/1999/xhtml" >     <head runat="server">       <title>          Untitled Page       </title>    </head>        <body>           <form id="form1" runat="server">          <div>                       <asp:Label ID="Label1" runat="server" Text="Welcome to ASP.Net Tutorials "></asp:Label>             <br />  <br />             <asp:Button ID="Button1" runat="server" onclick="Button1_Click"  Text="Copyright Info" />                       </div>          <Tfooter:footer ID="footer1" runat="server" />       </form>           </body> </html>

执行后,页面将显示页脚,并且此控件可以在网站的所有页面中使用。

自定义结果

请注意以下几点:

(1) Register指令为控件指定标签名称和标签前缀。

<%@ Register Src="~/footer.ascx" TagName="footer" TagPrefix="Tfooter" %>

(2)在页面上添加用户控件时,应使用以下标记名称和前缀:

<Tfooter:footer ID="footer1" runat="server" />

自定义控件

自定义控件被部署为单独的程序集。它们被编译成动态链接库(DLL),并用作任何其他ASP.NET服务器控件。可以通过以下两种方式之一创建它们:

  • 通过从现有控件派生自定义控件
  • 通过组合两个或更多现有控件组成一个新的自定义控件。
  • 通过从基本控件类派生。

为了理解这个概念,让我们创建一个自定义控件,该控件将简单地在浏览器中呈现文本消息。要创建此控件,请执行以下步骤:

创建一个新的网站。在“解决方案资源管理器”中,右键单击树顶部的解决方案(而非项目)。

解决方案资源管理器

在“新建项目”对话框中,从项目模板中选择“ ASP.NET Server控件”。

项目模板

上面的步骤添加了一个新项目,并为该解决方案创建了一个完整的自定义控件,称为ServerControl1。在此示例中,让我们将项目命名为CustomControls。若要使用此控件,必须先将其添加为对网站的引用,然后才能在页面上注册它。要添加对现有项目的引用,请右键单击该项目(不是解决方案),然后单击“添加引用”。

从“添加引用”对话框的“项目”选项卡中选择CustomControls项目。解决方案资源管理器应显示参考。

自定义控件

要在页面上使用控件,请在@Page指令下面添加Register指令:

<%@ Register Assembly="CustomControls"  Namespace="CustomControls"  TagPrefix="ccs" %>

此外,您可以使用该控件,类似于任何其他控件。

<form id="form1" runat="server">    <div>       <ccs:ServerControl1 runat="server" Text = "I am a Custom Server Control" />    </div>  </form>

执行后,控件的Text属性在浏览器上呈现,如下所示:

自定义服务器控件

使用自定义控件

在上一个示例中,设置了自定义控件的Text属性的值。创建控件时,ASP.NET默认情况下添加了此属性。控件文件后面的以下代码揭示了这一点。

using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text;  using System.Web; using System.Web.UI; using System.Web.UI.WebControls;  namespace CustomControls {    [DefaultProperty("Text")]    [ToolboxData("<{0}:ServerControl1 runat=server></{0}:ServerControl1 >")]        public class ServerControl1 : WebControl    {       [Bindable(true)]       [Category("Appearance")]       [DefaultValue("")]       [Localizable(true)]              public string Text       {          get          {             String s = (String)ViewState["Text"];             return ((s == null) ? "[" + this.ID + "]" : s);          }                    set          {             ViewState["Text"] = value;          }       }              protected override void RenderContents(HtmlTextWriter output)       {          output.Write(Text);       }    } }

上面的代码是为自定义控件自动生成的。事件和方法可以添加到自定义控件类中。

让我们扩展以前的名为SeverControl1的自定义控件。让我们给它一个名为checkpalindrome的方法,它使它有能力检查回文。

回文指的是相反的单词/文字。例如,马拉雅拉姆语,夫人,萨拉等。

扩展自定义控件的代码,其外观应为:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text;  using System.Web; using System.Web.UI; using System.Web.UI.WebControls;  namespace CustomControls {    [DefaultProperty("Text")]    [ToolboxData("<{0}:ServerControl1 runat=server></{0}:ServerControl1  >")]        public class ServerControl1 : WebControl    {       [Bindable(true)]       [Category("Appearance")]       [DefaultValue("")]       [Localizable(true)]              public string Text       {          get          {             String s = (String)ViewState["Text"];             return ((s == null) ? "[" + this.ID + "]" : s);          }                    set          {             ViewState["Text"] = value;          }       }              protected override void RenderContents(HtmlTextWriter output)       {          if (this.checkpanlindrome())          {             output.Write("This is a palindrome: <br />");             output.Write("<FONT size=5 color=Blue>");             output.Write("<B>");             output.Write(Text);             output.Write("</B>");             output.Write("</FONT>");          }          else          {             output.Write("This is not a palindrome: <br />");             output.Write("<FONT size=5 color=red>");             output.Write("<B>");             output.Write(Text);             output.Write("</B>");             output.Write("</FONT>");          }       }              protected bool checkpanlindrome()       {          if (this.Text != null)          {             String str = this.Text;             String strtoupper = Text.ToUpper();             char[] rev = strtoupper.ToCharArray();             Array.Reverse(rev);             String strrev = new String(rev);                          if (strtoupper == strrev)             {                return true;             }             else             {                return false;             }          }          else          {             return false;          }       }    } }

更改控件代码时,必须通过单击Build-> Build Solution来构建解决方案,以使更改反映在您的项目中。在页面上添加一个文本框和一个按钮控件,以便用户可以提供文本,单击该按钮时将检查回文。

<form id="form1" runat="server">    <div>       Enter a word:       <br />       <asp:TextBox ID="TextBox1" runat="server" style="width:198px"> </asp:TextBox>              <br /> <br />              <asp:Button ID="Button1" runat="server onclick="Button1_Click" Text="Check Palindrome" style="width:132px" />              <br /> <br />              <ccs:ServerControl1 ID="ServerControl11" runat="server" Text = "" />    </div> </form>

按钮的Click事件处理程序仅将文本从文本框复制到自定义控件的text属性。

protected void Button1_Click(object sender, EventArgs e) {    this.ServerControl11.Text = this.TextBox1.Text; }

执行后,控件将成功检查回文。

检查回文

请注意以下几点:

(1)当您添加对自定义控件的引用时,它会添加到工具箱中,您可以像其他任何控件一样从工具箱中直接使用它。

定制控件参考

(2)自定义控件类的RenderContents方法在此处被覆盖,因为您可以添加自己的方法和事件。

(3) RenderContents方法采用HtmlTextWriter类型的参数,该参数负责在浏览器上进行呈现。

------分隔线----------------------------
标签(Tag):
------分隔线----------------------------
推荐内容
  • ASP.NET-个性化

    网站设计用于用户的反复访问。 个性化允许站点记住用户身份和其他信息详细信息,并为...

  • ASP.NET-自定义控件

    ASP.NET允许用户创建控件。 这些用户定义的控件分为以下几类: 用户控件 自定义控件 ...

  • ASP.NET-数据绑定

    每个ASP.NET Web表单控件都从其父Control类继承DataBind方法,这使它具有将数据绑定到...

  • ASP.NET-数据源

    数据源控件与数据绑定控件进行交互,并隐藏复杂的数据绑定过程。 这些工具可将数据提...

  • ASP.NET-Ajax控件

    AJAX代表异步JavaScript和XML。 这是一种跨平台技术,可加快响应时间。 AJAX服务器控...

  • ASP.NET-面板控件

    面板控件用作页面上其他控件的容器。 它控制其包含的控件的外观和可见性。 它还允许以...

猜你感兴趣