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

ASP.NET 中的标签映射

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2012年3月27日

CPOL

3分钟阅读

viewsIcon

12211

考虑这样一种情况:你想在 ASP.NET 中为你自己的服务器控件添加功能。例如,你想改变背景

考虑这样一种情况:你想在 ASP.NET 中为你自己的服务器控件添加功能。例如,你想改变文本框的背景颜色,无论你在代码中将背景颜色设置为多少种不同的颜色,它都应该保持你想要的那样;并且同时你也希望这个功能适用于你的 Web 应用程序和网站中的每个文本框,控件可以是任何类型,它可以是文本框、下拉框、列表框、网格视图、按钮等等。如果你正在考虑在你的应用程序中实现这样的场景,或者你被困在某个地方无法实现,那么这篇文章绝对可以帮助你成功起飞。

实现标签映射很容易,不需要大量的代码。简单来说,你需要创建一个自定义类,继承你想设置标签映射的任何服务器控件。在这个自定义类中,你可以编写自己的验证,或者设置自己的属性来完成你想要完成的任务;此外还需要在 web.config 文件中添加一个条目,你可以在其中设置映射。所以,让我们先创建一个场景。

假设我想创建一个应用程序,其中有一个或多个文本框。对于这些文本框,我想创建一个规则,规则是设置所有文本框的全局背景颜色,无论我何时从代码后台设置 textbox.backcolor 属性。在这种情况下,如果我只设置一个文本框,那么捕获所有文本框并设置它们的背景颜色将非常麻烦。在这种情况下,我的标签映射就派上用场了,它允许我更改所有文本框的背景颜色,如果我尝试在回发中设置任何文本框的 backcolor 属性。这只是一个背景颜色的例子,你可以使用标签映射在许多服务器控件中完成许多其他任务。

对于上述情况,让我们首先创建代码。首先,在你的 Web 应用程序中创建一个 app_code 文件夹(如果它不存在)。通过右键单击该文件夹并选择“添加项”来添加一个类。将你的类命名为“CustomTextBox”(可以是任何名称)。现在,使用 TextBox 类继承这个类,并重写这个类的 BackColor 属性,并在 setter 中写入你想全局显示的任何颜色。有关完整代码,请参见下面的代码

public class CustomTextBox : System.Web.UI.WebControls.TextBox
{
    public CustomTextBox()
    {
           //
           // TODO: Add constructor logic here
           //
    }
    public override System.Drawing.Color BackColor
    {
        get
        {           
            return base.BackColor;
        }
        set
        {
            base.BackColor = System.Drawing.Color.LimeGreen;
        }
    }
    public override string Text
    {
        get
        {
            return base.Text;
        }
        set
        {
            base.Text = "Write Whatever it will not change";
        }
    }   
}

正如你在上面的代码中看到的,我重写了两个属性,text 和 Backcolor,并且在 setter 值中,我更改了我自己的颜色和我自己的文本。所以现在的问题是,在完成我的 web.config 条目之后,无论何时我设置我的控件的 text 属性,它将始终是“Write Whatever it will not change”,并且无论何时我设置我的控件的 backcolor 属性,它将始终是“LimeGreen”颜色,而不管我从代码后台设置的属性值。在继续之前,让我们先看看 web.config 条目。

<pages>
<tagMapping>
       <add tagType="System.Web.UI.WebControls.TextBox" mappedTagType="CustomTextBox" />
</tagMapping>
</pages>

上面的条目需要在 标签下完成。正如你所看到的,我正在将我的 customtextbox 类与 TextBox 服务器控件进行映射,以便我的 customtextbox 能够发挥作用。

为了实现这一点,我创建了一个标签、一个文本框和一个按钮,在按钮单击事件中,我将文本框的 text 属性设置为“Hello World”,并将 backcolor 属性设置为 Red,但是让我们看看当我这样做时会发生什么。

下面是我的 button1 click 事件的代码后台代码。

protected void Button1_Click(object sender, EventArgs e)
{
    TextBox1.BackColor = System.Drawing.Color.Red;
    TextBox1.Text = "Hello World";
}

现在让我们在浏览器中预览代码,在单击按钮之前

现在,当用户按下按钮时会发生什么?

正如你所看到的,文本更改为我在我的自定义类中设置的文本,BackColor 也发生了更改,而不管我的代码后台类的属性值如何。这就是 TagMapping 的魅力,它是在 2.0 Framework 中引入的。希望它能在类似的情况下帮助你。

© . All rights reserved.