|
public
class PlugArea : PlaceHolder, INamingContainer {
public override string ID {
get {
return base.ID;
}
set {
base.ID = value;
AddToContext();
}
}
private static readonly String contextKey = "Region.MasterPages.Region";
private void AddToContext() {
if ( HttpContext.Current != null ) {
String myKey = contextKey + this.ID;
if ( HttpContext.Current.Items.Contains(myKey) ) {
throw new InvalidOperationException("
这个
ID'"
+ this.ID + "'
已经用了啦!
."
);
} else {
HttpContext.Current.Items[myKey] = this;
}
}
}
internal static PlugArea FindPlugArea( String ID ) {
if ( HttpContext.Current == null ) {
return null;
}
return HttpContext.Current.Items[contextKey + ID] as PlugArea;
}
}
|
|
<
%@ Control %>
<
%@ Register TagPrefix="Region" Namespace="Region.Controls" Assembly="Region.Controls" %>
<
HTML
>
<HEAD>
<title>
信息管理系统
</
title
>
</HEAD>
<bodyleftmargin="0"topmargin="0"marginwidth="0"marginheight="0"> <formrunat="server"id="Form1">
<tablewidth = 800align=center border=0cellpadding=0cellspacing=0><tr><td>
相同的第一部分
</td></tr><tr><td>
<Region:PlugAreaid="part1"runat="server"/> </td></tr><tr><td>
相同的第二部分
</td></tr><tr><td>
<Region:PlugAreaid="part2"runat="server"/>
</td></tr><tr><td>
相同的第三部分
</td></tr></table>
</form>
</body>
</
HTML
>
|
|
public
class
SignArea
: PlaceHolder {
internal string Directory;
public override string TemplateSourceDirectory {
get {
return Directory;
}
}
}
|
|
<
Region:
SignArea
id
=
" part1"runat="server">
这里可以用我前面的文章讲
LoadSky
来来引用用户页面,或直接写内容放这里。
</
Region:
SignArea
>
<
Region:
SignArea
id
=
" part2"runat="server">
同上第一部分。
</
Region:
SignArea
>
|
|
public
class LoadTemplate : PlaceHolder {
private ArrayList signarealist = new ArrayList();
protected override void AddParsedSubObject(object obj)
{
if (obj is SignArea) {
signarealist.Add(obj);
}
}
protected override void OnInit(EventArgs e) {
this.GetTemplate();
base.OnInit(e);
}
private void GetTemplate() {
if (TemplateFilePath == null) {
throw new Exception("ûÓÐÄ£°åÒ³£¡");
}
Controls.Add(Page.LoadControl(TemplateFilePath));
SignAreaInsertIntoPlugArea();
}
private void SignAreaInsertIntoPlugArea() {
foreach (SignArea signarea in signarealist) {
PlugArea plugarea = PlugArea.FindPlugArea(signarea.ID);
if (plugarea == null ) {
throw new Exception("ÕÒ²»µ½²åÈëµÄ¿Õ¼ä'" + signarea.ID + "'");
}
SignArea.Directory = TemplateSourceDirectory;
plugarea.Controls.Clear();
plugarea.Controls.Add(signarea);
}
}
public string TemplateFilePath{
get {
return (string)ViewState["TemplateFilePath"];
}
set {
ViewState["TemplateFilePath"] = value;
ChildControlsCreated = false;
}
}
}
|
|
<
%@ Page %>
<
%@ Register TagPrefix="Region" Namespace="Region.Controls" Assembly="Region.Controls" %>
<
Region: LoadTemplate
runat
=
"server"id="LoadTemplate "TemplateFilePath ="~/Template.ascx">
<Region:
SignArea
id
=
"part1"runat="server">
<Region:
LoadSky
id
=
"Sky1" skinPath="~/List.ascx "runat="server"/>
</
Region:
SignArea
>
<
Region:
SignArea
id
=
"part2"runat="server">
<Region:
LoadSky
id
=
"Sky2" skinPath="~/
MyArchive
.ascx
"runat="server"/>
</
Region:
SignArea
>
</
Region:LoadTemplate
>
|
|
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
namespace Region.Controls {
public class MyForm : System.Web.UI.HtmlControls.HtmlForm {
public override string UniqueID {
get {
if (this.NoNameContainer && this.NamingContainer != this.Page ) {
return base.UniqueID.Substring(base.UniqueID.LastIndexOf(":")+1);
} else {
return base.UniqueID;
}
}
}
protected override void RenderAttributes(HtmlTextWriter writer) {
this. NoNameContainer = true;
base.RenderAttributes (writer);
this. NoNameContainer = false;
}
protected override void RenderChildren(HtmlTextWriter writer) {
this. NoNameContainer = true;
base.RenderChildren (writer);
this. NoNameContainer = false;
}
private Boolean NoNameContainer = false;
}
}
|
1034










Ping Back来自:blog.csdn.net
我用word写的!放到这里就成这个样子了,也是没有办法