而不是從System.Web.UI.Page
繼承的,讓他們都來自MyProject.MyBasePage
從頁面繼承繼承:
public abstract class MyBasePage : System.Web.UI.Page
{
protected override void Render(HtmlTextWriter writer)
{
//Code Logic Here
}
}
和...
public partial class MySpecificPage : MyBasePage
{
}
編輯
澄清加入問題現在指出了真正的困惑 - 所有這些頁面都需要這個共同的Re nder邏輯具有不同的繼承路徑。這在c#中更加棘手,您將無法避免至少一點多餘的管道代碼。有很多不同的方法來處理這個問題 - 這是我過去採取的一種方法:
1)爲這個通用功能創建一個接口。例如,IOverrideRender
:
public interface IOverrideRender
{
void Register(OverrideRender render);
}
public delegate void OverrideRender(HtmlTextWriter writer, Action<HtmlTextWriter> original);
2),其需要該功能的每個頁面獲取界面和導線它像這樣:
public partial class MyPage : Page, IOverrideRender
{
void IOverrideRender.Register(OverrideRender render)
{
this.overrideRender = render;
}
private OverrideRender overrideRender;
protected override void Render(HtmlTextWriter writer)
{
if(overrideRender != nul)
{
overrideRender(writer, base.Render);
}
else
{
base.Render(writer);
}
}
}
3)在一個HttpModule,檢查以查看是否該處理程序是IOverrideRender
如果是這樣,通過在自定義渲染方法:
public class OverrideRenderModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.PreRequestHandlerExecute += this.HandlePreRequestExecute;
}
private void HandlePreRequestExecute(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
IOverrideRender overridable = app.Context.CurrentHandler as IOverrideRender;
if(overridable != null)
{
overridable.Register(
(writer, original) => {
writer.Write("Hello world"); //custom write
original(writer); //calls base.Render
});
}
}
}
使用基類繼承的所有其他網頁。頁面,然後用它爲您的所有網頁 – 2011-01-26 14:57:11
編輯:有些使用System.Web.UI.Page類和一些網頁從名爲ModifiedPage另一類繼承和overridies的System.Web.UI.Page類的其他功能繼承。所以它不像繼承一個類的所有頁面那麼簡單。 – 2011-01-26 15:06:02