而不是从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