是否可以在不扩展控件的情况下修改控件属性的 get 和 set 方法?



假设我运行的网站有许多.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的每个实例?

您可以向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);
}

最新更新