【问题标题】:How Page class's property(instance) is accessible without objectPage 类的属性(实例)如何在没有对象的情况下访问
【发布时间】:2026-01-20 03:30:01
【问题描述】:

这可能是一个愚蠢的问题,但我有一个困惑。
每个.aspx 页面都继承System.Web.UI.PagePage 类具有一些属性,例如IsPostBackIsValidIsCrossPagePostBack 等等...要访问这些属性,我们编写Page.IsPostBackIsPostBack
现在,问题是,这些属性是static,如果不是,那么如何在.apsx 文件中访问这些属性,我尝试使用class 进行测试,但没有成功。

    public class clsDemo:System.Web.UI.Page
    {
    }  

【问题讨论】:

    标签: c# asp.net .net asp.net-mvc


    【解决方案1】:

    页面类派生自TemplateControl类;

    public class Page : TemplateControl, IHttpHandler
    

    TemplateControl类派生自抽象Control类;

    public abstract class TemplateControl : Control, ...
    

    Page类派生的Control类中有一个名为Page的虚拟属性;

        // Summary:
        //     Gets a reference to the System.Web.UI.Page instance that contains the server
        //     control.
        //
        public virtual Page Page { get; set; }
    

    Page 类中有IsPostBackIsValid 等属性;

        // Summary:
        //     Gets a value that indicates whether the page is being rendered for the first
        //     time or is being loaded in response to a postback.
        //        
        public bool IsPostBack { get; }
    

    因此,

    由于aspx页面派生自Page类,它也继承了TemplateControlControl类。在Control 类中有一个名为Page 的公共属性,因此您可以在您的类中访问Page 属性。而Page 类具有IsPostbackIsValid 等公共属性,因此您可以从Page 属性中使用这些属性。

    public class Test : Page
    {
        public Test()
        {
            bool test = this.IsCallback;
        }
    }
    

    【讨论】:

    • 你能否详细解释一下,它是如何被调用的,或者必须在一个类中访问这些属性
    • @daryal,如何在类中访问这些属性。
    • @Arshad 在什么类,派生自 Page 的类?
    • 它根本不起作用,我试过了,也在问题中添加(最后一部分)
    • @Arshad 我添加了一个类并从 Page 派生它,我可以访问 IsCallback、IsPostBack 等;也许我没有正确理解这个问题。