• 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是不会有错的。

    
  • 相关阅读:
    用Service充当Domain Object
    Scrum方法回顾
    为什么使用User Story Map
    前端状态管理之状态机
    项目进度管理注意事项
    单元测试遇到的最难的问题
    JS AMD模块的循环依赖
    jupyter notebook常用快捷键
    Jupyter-NoteBook-你应该知道的N个小技巧
    Python之配置日志的几种方式(logging模块)
  • 原文地址:https://www.cnblogs.com/doosmile/p/2052225.html
Copyright © 2020-2023  润新知