想要的效果就是像winform一样的可视化继承页面。
如果成功,另开一帖再加分。

解决方案 »

  1.   

    要可视化继承做什么?你写个自义模板控件不是和可视化继承一样吗?目的不就是在一个页子中放了一些控件,然后在其它的页可以重用吗?模板控件(包括:用户控件 和 自定义控件)就可以实现这个效果噢,不是所有的CS都能转化为BS的噢。http://chs.gotdotnet.com/quickstart/aspplus/   看看这里的模板控件吧。
      

  2.   

    呵呵。。关键有个问题是,不光想重用,还想可以可视化的修改父窗体中的某些属性。
    用户控件所公布出来的属性 都是string类型来显示的。非常之不方便。比如我有一个gridview
    在父窗体中有3列,可是在我需要的子窗体中要修改成n列。要是能在子窗体中也能对其进行鼠标右键式的操作就好了。
      

  3.   

    重用用自定义控件。继承Page可能比较难,没弄过,应该注意它是个部分类,有两部分代码。
      

  4.   

    HttpContext.Current.XXXX
    CS文件里一样可以用
      

  5.   

    如果你觉得,写自定义控件麻烦,那你可以跟据这个原理,写一个用户控件,这样用起来方便点,这正是你说的可视化继承。步骤:
    1、定义一个模板文件(这个文件里可以什么都没有代码如下:)
       aspx文件:
       <%@ Control Language="c#" AutoEventWireup="false" Codebehind="ItemContainer.ascx.cs" Inherits="Com.Web.UserControlLib.Templates.ItemContainer" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>   aspx.cs文件:   using System;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls; /// <summary>
    /// ItemContainer 的摘要说明。
    /// </summary>
    public class ItemContainer : System.Web.UI.UserControl
    { private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    } #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器
    /// 修改此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
    this.Load += new System.EventHandler(this.Page_Load);
    }
    #endregion
             注意看一下,其实这里就是一个空的用户控件2、现在可以定义模板控件了   aspx:
       <%@ Control Language="c#" AutoEventWireup="false" Codebehind="mlContainer.ascx.cs" Inherits="Com.Web.UserControlLib.Templates.mlContainer" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
    <!-- 注意下面这一行 -->
    <%@ Register TagPrefix="uc1" TagName="ItemContainer" Src="ItemContainer.ascx" %><TABLE> 
       <TR>
         <TD colSpan="2" align="center" valign="top">
             在这里放一行试试看,是不是可以被继承,哈哈。
        </TD> 
        
     </TR>
       <TR>
         <TD colSpan="2" align="center" valign="top" ><br>
         <!-- 注意下面这一行,相当于占位符 -->
         <uc1:ItemContainer id="Container1" runat="server"></uc1:ItemContainer>
        </TD> 
        
     </TR>
    </TABLE>   注:在这个页子的其它地方,你想放啥控件,就放吧,都可以被继承到你的其它页面中了。    aspx.cs代码:《××× 下面的这个CS代码你要好好的看一下。××××》    public class mlContainer: System.Web.UI.UserControl
    {
    public ItemContainer Container1;

    System.Web.UI.ITemplate m_ItemTemplate1;

    [
    System.Web.UI.TemplateContainer(typeof(ItemContainer))
    ]
    public virtual System.Web.UI.ITemplate ItemTemplate1
    {
    get
    {
    return this.m_ItemTemplate1;
    }
    set
    {
    this.m_ItemTemplate1 = value;
    }
    }


    protected override void CreateChildControls()
    {
    if (this.m_ItemTemplate1 != null && this.Container1 != null)
    {
    this.m_ItemTemplate1.InstantiateIn(this.Container1);
    }

    base.CreateChildControls();
    }
    }三、使用模板控件页:
      <%@ Register TagPrefix="UC" TagName="MyContainer" Src="/UserControlLib/Templates/mlContainer.ascx" %>
       <UC:MyContainer id="MyContainer1" runat="server">
    <ItemTemplate1> 
         这里面你可以放其它的东西了,表格控件都行,随便放了。
    </ItemTemplate1>
    </UC:MyContainer>看到了吧,这里就把模板控件里的东西继承过来了。
      

  6.   

    呵呵。。关键有个问题是,不光想重用,还想可以可视化的修改父窗体中的某些属性。
    用户控件所公布出来的属性 都是string类型来显示的。非常之不方便。比如我有一个gridview
    在父窗体中有3列,可是在我需要的子窗体中要修改成n列。要是能在子窗体中也能对其进行鼠标右键式的操作就好了。-----------------------呵呵,晕,你给用户控件写个属性,把这个属性与你用户控件中的列表的列数对应不就行了吗?楼主,你别太想省事了。
      

  7.   

    asp.net没有那么高级,不支持aspx或者ascx继承。它们的codebehind的类型的某个父类可能会设计为继承的,但是那个根本不是它们继承了,不要搞混。你只能组合。在ascx中组合另外一个ascx。但是,这种组合就意味着不能通过设计器上修改原来的父类的设计。你也许可以通过代码来写,但是这不是继承了。