快速业务通道

用动态控件模拟复合控件(一)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-19
context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute);
context.PostRequestHandlerExecute += new EventHandler(context_PostRequestHandlerExecute);
}
void context_PostRequestHandlerExecute(object sender, EventArgs e)
{
//页面执行结束,清理
BaseTextBoxContext.Current.RemoveContext();
}
void context_PreRequestHandlerExecute(object sender, EventArgs e)
{
Page page = HttpContext.Current.CurrentHandler as Page;
if (page != null)
{
//注册页面的PreInit和PreRender事件
page.PreInit += new EventHandler(Page_PreInit);
page.PreRenderComplete += new EventHandler(page_PreRenderComplete);
}
}
void page_PreRenderComplete(object sender, EventArgs e)
{
try
{
List<EventHandler> list = new List<EventHandler>(BaseTextBoxContext.Current.PreRenderHandlers);
foreach (EventHandler handler in list)
{
//执行控件要求要PreRender时的事件函数
handler.Invoke(sender, e);
}
}
finally
{
BaseTextBoxContext.Current.PreRenderHandlers.Clear();
}
}
void Page_PreInit(object sender, EventArgs e)
{
try
{
List<EventHandler> list = new List<EventHandler>(BaseTextBoxContext.Current.PreInitHandlers);
foreach (EventHandler handler in list)
{
//执行控件要求要PreInit时的事件函数
handler.Invoke(sender, e);
}
}
finally
{
BaseTextBoxContext.Current.PreInitHandlers.Clear();
}
}
#endregion
}

现在第一个问题和第二个问题的一部分解决了。为了在Page.PreInit之前,让用户控件自己把自己的事件添加到BaseTextBoxContext中,我在BaseTextBox的构造函数中,调用

BaseTextBox 构造

public BaseTextBox()
{
BaseTextBoxContext.Current.AddPagePreInit(new EventHandler(Page_PreInit));
}

把自己要在Page.PreInit中执行的函数添加进去。在控件的Page_PreInit时, 我们要添加动态控件,还可以把自己放在另一个动态控件的内部哟,比如把TextBox放在Panel中,生成类似:

<div class="input_wrapper">
<input type="text" />
<span class="helpmessage">help message here</span>
<!--这里放置动态验证控件-->
</div>

下面是我的实现:

BaseTextBox

[Flags]
public enum TextBoxOptions
{
None = 0,
Required = 1,
Filtered = 2
}
public class BaseTextBox : TextBox
{
private bool preRendered = false;
private bool buildValidatorControls = false;
public BaseTextBox()
{
BaseTextBoxContext.Current.AddPagePreInit(new EventHandler(Page_PreInit));
}
void Page_PreInit(object sender, EventArgs e)

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号