ASP.NET 直接访问用户控件
2012-09-26 00:07 兜兜里没有药 阅读(321) 评论(2) 编辑 收藏 举报这个功能主要是为了解决常规的AJAX更新数据时对HTML代码的拼接,大力解决了AJAX开发的复杂性,维护性;个人觉得还是一个不错的解决方案!
首先要实现客户端对用户控件的直接访问,需在Web.config进行如下配置:
<system.webServer> <handlers> <add name="ControlLoadHandler" path="*.ascx" type="Crazy.CRM.ContorlLoadHandler" verb="*"/> //当碰到.ascx后缀的请求时,让其交于一般处理程序ControlLoadHandler处理 </handlers> <security> <requestFiltering> <fileExtensions allowUnlisted="true"> <remove fileExtension=".ascx"/> //移除IIS对.ascx后缀的访问限制,如果较低版本的IIS可能不需要。 </fileExtensions> </requestFiltering> </security> </system.webServer>
此时当我们发生一个ajax路径为“~/Test.ascx”时就将交于ControlLoadHandler处理。
ControlLoadHandler代码如下:
View Code
1 using System; 2 using System.Web; 3 using System.Web.UI; 4 using System.IO; 5 using System.Text; 6 7 namespace Crazy.CRM 8 { 9 /// <summary> 10 /// 客户端访问用户控件.ascx处理类 11 /// </summary> 12 public class ContorlLoadHandler : IHttpHandler 13 { 14 15 public void ProcessRequest(HttpContext context) 16 { 17 //获取请求的相对路径"~/text.ascx",这里将不会得到URL参数 18 string controlPath = context.Request.AppRelativeCurrentExecutionFilePath; 19 20 //加载请求的用户控件,并添加到实例的页面中 21 Page page = new Page(); 22 Control control = page.LoadControl(controlPath); 23 page.Controls.Add(control); 24 25 //获取用户控件最终解析后的代码 26 StringWriter controlHtml = new StringWriter(); 27 context.Server.Execute(page, controlHtml, false); //在我认识中只有使用Server.Execute方法才能引发控件的生命周期事件,如Load 28 29 //响应请求,输出代码 30 context.Response.Write(controlHtml.ToString()); 31 } 32 33 public bool IsReusable 34 { 35 get 36 { 37 return false; 38 } 39 } 40 } 41 }
此时这个功能已经做好了,很简单吧!
我们可以写个测试:
<a href="Test.ascx">测试访问用户控件</a>
大家可以试试哦!这个功能目前只是简单的访问,还未进行其他的处理,如果大家有兴趣或者有更好的方法不妨拿出来分享下哦~~