private void Page_Load(object sender, EventArgs e)
    {
        
        
    }
    protected void loginButton(object sender, EventArgs e)
    {
           
    }
这样没错我把 loginbutton 改为 private 就错了.这个我知道.响应按钮事件.
但是为什么Page_Load 为 private可以通过??它是初始化页面事件啊.但是为什么可以私有呢??
CS文件和ASPX文件 里面的页面类.不是继承关系的吗??谢谢!

解决方案 »

  1.   

    一个ASPX文件文件把代码分为两部分,一部分就是c#那些,一部分是静态页面的如html代码,
    一个页面自身本来就是私有的,所以默认都取private都可以。
    但如果你其他页面或地方需要调用该页面类或功能,则该页面的函数或相关代码就要用public,
    我也不很明白怎样说清楚,大概这么看法。
      

  2.   

    private 是在 该类内可调用,
    一般 button 事件是回调的,已经 不是 在 该 页面类的生命周期 内了,所以 private 不行
      

  3.   

    Page类 一个页面的HTTP处理句柄的类型取决于URL。当这个URL被首次访问,一个新的类将被构建并动态的编译成一个程序集。一个分析aspx文件的进程从aspx文件中分离出这个类的代码。在默认情况下,这个类被加入到一个叫做asp的名字空间里,并且把URL作为这个类的类名。例如,如果请求的URL是page.aspx,则这个类就是ASP.Page_aspx。这个类名,可以通过设置@Page预处理指令的ClassName属性来修改。HTTP句柄的基础类是Page类。这个类定义了一组最小方法和属性集,这些方法和属性被所有的页面处理句柄所共享。Page类具体实现了IHttpHandler接口。在另外一种和上述相对应的情况中,实际处理页面的句柄的基础类并不是Page类,而是一个别的类。当使用后代码模式时,这个情况就发生了。后代码是一种将C#或VB.NET代码和页面分离的技术。页面代码是一组事件处理句柄和其他一些方法的集合,这些方法定义了页面的各种行为。这些代码可以以内联形式用<script runat=server>标签定义,或者你可以用外部类形式来写——这就是后代码模式。后代码类是从Page类继承的,但是具体化或者重新定义了一些其他的方法。在指定了页面的后代码类后,这个后代码类就作为HTTP处理句柄。在其他的情况下,如果应用程序的配置文件中重定义了<pages>节的PageBaseType属性,则HTTP处理句柄不是基于Page类的,例如:<pages PageBaseType = “Classes.MyOage , mypage” /> PageBaseType属性指明了包含页面处理句柄父类的类型和程序集。来自Page类的这些类自动赋予一些通常或扩展的方法和属性的集合给处理句柄。
    页面生命周期一旦HTTP页面处理句柄被明确的定义了,ASP.NET运行时调用处理句柄的ProcessRequest方法来处理请求。通常,没有必要改变Page类提供的执行方法。页面执行是从FrameworkInitialize方法开始的,这个方法为页面构建控件树。该方法是TemplageControl类的受保护并且是虚方法。任何为aspx资源动态生成的句柄覆盖了该方法。在这个方法里,页面的所有控件树都被构建了。接下来,ProcessRequest方法使页面经历了不同的几个阶段:初始化、加载视图状态信息、回传数据、加载页面代码和执行回传的服务器事件。在这之后,页面转换到了显示模式:收集被更新的视图状态;产生HTML代码,并且传送到控制台。最后,页面卸载,请求的全部服务结束了。  在各个不同阶段里,页面处理了与web控件相关、程序员代码能够干预并解决一定问题的事件。其间一些事件是专门为那些内嵌控件和不能在.aspx代码级别处理的控件而设计的。一个页面要解决这样的事件,它能明确的注册成为合适的句柄。但是,为了和原有的Visual Basic编程模式有后向兼容性,ASP.NET也支持了隐含事件的形式。在默认情况下,页面会寻找和事件相关的方法名;如果找到和事件相匹配的方法,这个方法就被认为是这种事件的处理程序。ASP.NET提供了六种专门的方法名,他们是 Page_Init , Page_Load , Page_DataBind , Page_PreRender 和 Page_Unload 。这些方法这些方法在Page类中已经被定义过,他们是相应事件的处理程序。HTTP运行时将自动的将这些方法绑定到相关的页面事件,而不需要程序员去编写把事件和方法联系起来的代码。举个例子来说,在下面的代码中, Page_Load方法和页面的加载事件相关联: this.Load + = new EventHandler(this.Page_Load); 这种自动识别是被 @Page 预指令的AutoEventWireup 属性控制的。如果这个属性被置false ,应用程序必须显式声明和事件相关的方法。不自动关联页面事件代码的页面执行起来会快一些,是因为他们不需要在匹配上做过多的工作。在Visual Studio.NET 工程里可以把这个属性关闭掉。但是,默认设置是true,这意味着Page_Load方法被自动识别并被关联到相关的事件。页面执行包含了下表中按顺序列出的几个阶段,他们被标志成为应用程序级别的事件,同时也可能是一些受保护、重定义的方法:阶段 
    页面事件 
    可重定义的方法 页面初始化 
    Init 视图状态加载 LoadViewState 回传数据处理 控件里实现了IPostBackDataHandler接口的LoadPostData方法 页面加载 
    Load 回传数据变化检查 控件里实现了IPostBackDataHandler接口的RaisePostDataChangedEvent方法 回传事件处理 
    控件里定义的回传事件 
    控件里实现了IPostBackEventHandler接口的RaisePostBackEvent方法 页面预返回阶段PreRender 页面返回阶段    
    Render 页面卸载阶段 
    Unload 
    上表中列出的阶段有的在页面级别是不可见的,他们只是在服务器控件的作者编写继承于Page的类时会使用到。Init , Load , PreRender , Unload,再加上定义在内嵌控件中的回传处理事件,他们构成了页面的整个生命周期。
      

  4.   

    MSDN
    页面对象模型http://msdn2.microsoft.com/zh-cn/library/aa479007.aspx
      

  5.   

    继承关系 这是aspx的代码隐藏  aspx继承 cs文件  cs文件继承page
    你可以不用代码隐藏写下 就知道了 
      

  6.   

    类的继承,说到底就是类的继承.
    给你个拓展.到网上查查BasePage吧.
    basepage中你可以重载page加载时的各种函数,   并定义自己的属性值.   从basepage继承的页面不必自已再重新写重载函数了,   其他页面引用从basepage继承的页面时可以直接访问basepage中定义的属性. 
    BasePage用于重写页面生命周期中某些阶段的处理方式,可以插入用户自己的逻辑,比如访问统计,身份验证,执行时间等等
    http://topic.csdn.net/u/20071226/13/ebde04a4-615e-4766-b48a-05fa6bac07ec.html
    这些都是类的继承oo思想的最好的实例.
      

  7.   

    当然楼主可不要误解了basepage是.net framework封装的一个类,起什么名都可以.它是一种思想,继承原始page类,并在此基础上加上权限判断,访问统计之类的东西.
    比如.你在某个服务器文件夹里,就说金牌用户可操作的各个页面吧,你如果在每页判断权限很麻烦,你就可以编写个自定义page类,加上权限的判断等功能函块块.以后每个该文件夹所在页面只要简单地写上继承这个页面类即可.
    oo思想很鲜明啊.
      

  8.   

    网上对这个问题的争论好多。
    asp.net1.0和asp.net2.0的关系是不一样的 , 1.0的没研究过 , 举例说明2.0的吧 :
    XXX.aspx和XXX.aspx.cs这两个文件被编译后会生成两个class , 分别是XXX.cs和ASPX_XXX.cs
    其中ASPX_XXX.cs是继承XXX.cs的 ! 从这里可以体现出aspx页面中Inherit属性 ! 
    那XXX.aspx.cs中的partial又怎么理解呢 :
    XXX.cs这个类是一个partial类 ,它的内容放在两个不同的文件中 !
    一个放XXX.aspx文件中声明的控件变量 , 一个放XXX.aspx.cs文件中定义的所有内容!所以XXX.aspx和XXX.aspx.cs这两个文件不是继承关系 , 编译后它们是同一个类 !写到这里也许有人会问 : 为什么XXX.aspx.cs中的方法不能是protected而要写成private ,
    那是因为编译后生成的新类 ASPX_XXX.cs的缘故 , 真正的处理放在ASPX_XXX.cs里面 !
      

  9.   

    补充说明最后一段 , 有点笔误哈 :写到这里也许有人会问 : 为什么XXX.aspx.cs中的方法不能是private而要写成protected ,
    那是因为真正的处理放在ASPX_XXX.cs里面(ASPX_XXX.cs是继承XXX.cs的),如果是private根本访问不到。
      

  10.   

    不过楼主,你是怎么部署项目的?
    我用vs2008本地IIS方式。按钮事件写成private的,也可以的啊
    .aspx肯定是继承自.aspx.cs和.aspx.designer.cs的
    但是,它们是部分类。最终.net会把他们编译成同一个.cs和dll的
    所以都是类中,应该可以用private的
      

  11.   

    http://axzxs.blog.51cto.com/730810/149943
    转别人的,我觉的对于这个问题说的很清楚而且易懂。
      

  12.   

    aspx是继承了cs的。所以在cs文件里面Page_Load是类内部的调用自己的函数。当然可以啦但你的button案件事件是aspx中调用cs中的方法,换句话说,也就是子类调用父类中的方法,protected 自然是调用不了了的啦、、、