【问题标题】:Is it possible to modify a control property's get and set methods without extending the control?是否可以在不扩展控件的情况下修改控件属性的 get 和 set 方法?
【发布时间】:2013-07-30 16:23:23
【问题描述】:

假设我正在运行一个包含许多.aspx 页面的站点,这些页面继承自一个名为FormPage.cs 的文件。创建这些页面时,其中许多使用了隐藏字段,如System.Web.UI.WebControls.HiddenField。现在,已经意识到这些隐藏字段的Value 属性需要如下所示:

public override string Value
{
    get
    {
        return HttpUtility.HtmlDecode(base.Value);
    }
    set
    {
        base.Value = HttpUtility.HtmlEncode(value);
    }
}

是否可以在FormPage.cs 文件中修改HiddenField 的get 和set 方法而不创建继承自它的新类,因此我不必自始至终替换HiddenField 的每个实例所有页面?

【问题讨论】:

    标签: c# asp.net visual-studio-2012 web-controls hidden-field


    【解决方案1】:

    您可以向 HiddenField 控件添加扩展方法——它不需要继承即可工作。但解决方案也是有限的,因为您必须更改代码以默认引用扩展方法。

    public static void SetValue(this HiddenField c, string text)
    {
        c.Value = HttpUtility.HtmlEncode(text);
    }
    
    public static string GetValue(this HiddenField c)
    {
        return HttpUtility.HtmlDecode(c.Value);
    }
    

    【讨论】:

    • 嗯,这是另一种选择。谢谢。
    • 我想我想避免继承的原因是因为我尝试创建一个名为HiddenField 的新类,它扩展了现有的同名类。我在每个页面顶部的 using 部分中包含的另一个 .cs 文件中执行此操作。由于模棱两可,这引发了错误。但是,看起来如果我在 FormPage.cs 中定义覆盖类,它可能会起作用。
    • 实际上,我认为这是最好的选择——创建一个新类,用您的代码扩展HiddenField 类。只是不要将其命名为与基类​​相同的名称,因为存在歧义的问题。然后在您的 aspx 页面中对 HiddenField 类的所有实例进行全局搜索,并将它们的声明替换为您的自定义类的实例。
    猜你喜欢
    • 1970-01-01
    • 2016-03-11
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 2014-09-11
    • 2022-11-11
    相关资源
    最近更新 更多