65.9K
CodeProject 正在变化。 阅读更多。
Home

构建 ASP.NET 自定义 Web 控件:一个文本框和一个验证器合二为一

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.58/5 (26投票s)

2002 年 8 月 13 日

3分钟阅读

viewsIcon

294779

downloadIcon

3835

在本文中,我们将了解如何实现自定义 Web 控件。 这个 Web 控件将继承自 TextBox Web 控件,并在运行时自动添加必填字段验证器。

引言

在本文中,我们将了解如何实现自定义 Web 控件。 这个 Web 控件将继承自 TextBox Web 控件,并在运行时自动添加必填字段验证器。 这样,当我们需要一个必填字段文本框时,我们不需要处理必填字段验证器,而是只需定义一个自定义 Web 控件的实例即可。

类定义

我们的 Web 控件的类定义非常简单。 由于我们要创建一个 TextBox 控件,我们将继承 TextBox 类。 这意味着我们仍然可以使用为 TexBox 定义的所有现有属性 - 毕竟,我们希望以文本框为基础,并嵌入必填字段验证器。 让我们看看 RequiredTextBox 控件的代码隐藏文件。

using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WimdowsControls.Web.UI {
  public class RequiredTextBox : TextBox {
    private  RequiredFieldValidator req;
    public string InvalidMessage;
    public string ClientScript="true";

    protected override void OnInit(EventArgs e) {
      req = new RequiredFieldValidator();
      req.ControlToValidate = this.ID;
      req.ErrorMessage = this.InvalidMessage;
      req.EnableClientScript = (this.ClientScript.ToLower()!="false");
      Controls.Add(req);
    }

    protected override void Render(HtmlTextWriter w) {
      base.Render(w);
      req.RenderControl(w);
    }
  }
}

正如我们所见,我们定义了从 System.Web.UI.WebControls.TextBox 类继承的 RequiredTextBox 类。 由于我们的文本框没有像 RequiredFieldValidator ErrorMessage 属性那样的属性,我们需要为此定义一个公共属性。 请注意,我们不一定需要此属性的 get 和 set 方法。 此外,我们定义了一个 ClientScript 属性,它将映射到验证器控件的相应 EnableClientScript 属性。 OnInit 方法是一个我们需要重写的方法,因此我们可以显式地将(通过使用 Controls.Add 方法)必填字段验证器控件添加到我们的 TextBox 控件。 此外,我们必须重写将 HTML 呈现到浏览器的 Render 方法。 通过调用 base.Render() 方法,我们调用基类(在本例中为 TextBox 类)上的 Render 方法。 除此之外,我们需要通过调用其 RenderControl 方法来呈现 RequiredFieldValidator 控件的 HTML 代码。 现在我们需要将其编译成一个程序集。 使用 C# 编译器,我们使用以下命令(假设目录是我们的虚拟目录,其中包含我们的 .aspx 和代码隐藏文件)

csc /out:bin\wimdowscontrols.dll /target:library /r:system.dll wimdowscontrols.cs

现在,让我们看看我们酷炫的 ASP.NET 页面是什么样的

<%@ Register TagPrefix="Wimdows" Namespace="WimdowsControls.Web.UI" 
             Assembly="WimdowsControls" %>

<form runat="server">
<Wimdows:RequiredTextBox runat="server" id="txtName" 
                         InvalidMessage="Name is required." 
                         ClientScript="false"/>
<br />
<asp:Button runat="server" id="btnSubmit" Text="Validate"/>
</form>

就这样! 我们需要 Register 指令来注册我们的组件,几乎与我们使用用户控件的方式相同。 用户控件将指向 Src .ascx 文件,我们指定声明自定义控件的命名空间和物理程序集 DLL。 通过使用任何 TagPrefix,我们可以将新的自定义控件称为 <TagPrefix:ClassName>。 当然,我们需要 runat=server 属性,并且我们指定控件支持的其他一些属性。 我们准备好了! 让我们试一试! 我们的控件不应使用客户端验证,因为我们指定了 ClientScript=false 属性。 这是截图

您会注意到,在提交表单时,它总是会执行服务器往返,因为我们显式地将 ClientScript 属性值指定为 false。

结论  

在本文中,我们简要地了解了创建自己的组合自定义控件的好处。 当然,您可以通过添加更多控件和更多属性来扩展示例 - 但我将把它留给您。 您现在知道了基础知识!

© . All rights reserved.