zoukankan      html  css  js  c++  java
  • usercontrol 和 page 的继承

    转载的。。原文 http://hi.baidu.com/479775812/blog/item/4f3a0a5cb037d64afbf2c04e.html

    感觉很有用,所以加进来,以备以后使用。。

    我们以前的项目很多都用了页面继承和用户控件的继承,由于Code-behind模型和编译模型的变化,实现它们的方法也有了一些变化。
    1.动态装载UserControl
    在1.x里,动态装载UserControl是很简单的,
    例如:MyControl myControl = (MyControl)LoadControl("~/MyControl.ascx");
    而在2.0里,却还需要在页面里加上<%@ Reference Control="~/MyControl.ascx" %>
    这里就有了一个问题,如果我要装载的UserControl是不可预知的,那我必需把在页面添加所有的可能的UserControl引用,麻烦。
    再如果我可能在运行时生成UserControl,那么装载这样的UserControl,那就还必需在动态修改页面的引用
    2.UserControl继承
    在1.x里,例如有 UserControl基类
    public class BaseUserControl : System.Web.UI.UserControl{...}
    继承:
    public class DerivedControl :BaseUserControl{...}
    BaseUserControl只需要在一个CS文件定义就可以(BaseUserControl只是一个普通的类)
    在2.0中,则BaseUserControl必需定义在一个UserControl里面,就是BaseUserControl必需是一个完整的UserControl(包括*.ascx和*.ascx.cs或*.ascx.vb)
    假如已经定义一个完整的BaseUserControl
    继承:
    在DerivedControl.ascx.cs中
    public partial class DerivedControl : BaseUserControl{}
    在DerivedControl.ascx中必需添加 <%@ Reference Control="~/BaseUserControl.ascx" %>
    而且它还必需在<%@Control%> 的前面
    <%@ Control Language="C#" AutoEventWireup="true" CodeFileBaseClass="BaseUserControl"
    CodeFile="~/DerivedControl.ascx.cs" Inherits="DerivedControl" %>
    CodeFileBaseClass指定父类类型

    3.Page继承
    与UserControl继承类似,需要从一个完整Page×(包括*.aspx和*.aspx.cs)来继承
    在1.x里,例如有 Page基类
    public class BasePage : System.Web.UI.Page{...}
    在DerivedPage.aspx.cs中
    public partial class DerivedPage : BasePage{}
    在DerivedPage.aspx中必需添加 <%@ Reference Control="~/BasePage.aspx" %>
    它也必需在<%@Page%> 的前面。
    <%@ Control Language="C#" AutoEventWireup="true" CodeFileBaseClass="BasePage"
    CodeFile="~/DerivedPage.ascx.cs" Inherits="DerivedPage" %>

    要指出的是DerivedPage.aspx存根代码(即ASPNet2.0由*.aspx自动生成的那部分)会隐藏BasePage.aspx的存根代码
    (UserControl也一样)例如在BasePage.aspx中定义一个控件如Label1,而在DerivedPage.aspx没有定义它,而 在DerivedPage中加入了操作Label1的代码,在预编译的时候,都是正常的,但在运行时访问DerivedPage.aspx就会报错,指出 对Label1引用没有指定到一个对象的实例。那么我们可以简单地认为,在运行时,ASP.Net只会对所请求的页面的控件进行实例化,当然我们也可以在 后台手工进行控件实例化。当然我们访问BasePage.aspx是不会有错的。

    
  • 相关阅读:
    python3爬虫--反爬虫应对机制
    mongodb与mysql区别(超详细)
    cookie和session运行机制、区别
    flask轻量级框架入门
    python自定义元类metaclass,约束子类
    MongoDB ObjectId类型 序列化问题
    【python 内置模块】 返回一个规定长度的随机字符串
    使用PyMongo有多重,使用MongoClientwith的实例时必须小心 fork()
    MySQL 服务正在启动 . MySQL 服务无法启动。 服务没有报告任何错误。
    分布式文件系统架构HDFS、FastDFS、Haystack
  • 原文地址:https://www.cnblogs.com/doosmile/p/2052225.html
Copyright © 2011-2022 走看看