asp.net web控件的公共属性保存在哪里?

本文关键字:属性 保存 在哪里 net web 控件 asp | 更新日期: 2023-09-27 18:13:56

我有一个web控件派生自另一个web控件(在本例中为GridView)。当我给web控件添加新属性时,比如

public string name {get;set;} 

属性是否被保存在某处?如果是,它是自动存储在控制状态中,还是需要重写SaveControlState函数…

我能够确定应用程序的行为,但想知道正确的实现。

asp.net web控件的公共属性保存在哪里?

还有一些其他的方法,但超出了这个问题的范围,参见下面:

//stores it in memory
public string name {get;set;} 
//viewstate backed property, preserved on postback when viewstate is enabled
public string name {
    get
    {
        return (string)ViewState["name "] ?? String.Empty; //default value
    }
    set
    {
        ViewState["name "] = value;
    }
}

以这种方式声明的属性由编译器创建的私有字段支持。它们只在类的生命周期内存在。

如果您希望在回发之间持久化,请使用ViewState作为后备存储。正如您建议的那样,您也可以重写控件状态方法,但是ViewState可能更简单。

ETA: Schott先生在他的回复中有一个使用ViewState的好例子。

你说的"Is that property being saved somewhere "是什么意思?如果你将属性添加到你的类中,那么它就是你的类的成员,并且被包含在该类实例作用域的堆中。

你只是在问自动实现属性的语法吗?当你这样写:

public string name {get;set;}

它真的只是语法糖。当代码被执行时,编译器已经把它变成了类似这样的东西:

private string _name;
public string name
{
    get
    {
        return _name;
    }
    set
    {
        _name = value;
    }
}

自动实现属性只是一种减少需要输入的代码量的方法,允许您专注于您试图表达的内容,而不必将其包装在太多的语言开销中,这对代码的表达性没有真正的贡献。最终结果与手动实现整个属性完全相同,如果您不需要向属性添加任何自定义逻辑,这只是一种快捷方式。