ASP.NET 直接访问用户控件

这个功能主要是为了解决常规的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>

大家可以试试哦!这个功能目前只是简单的访问,还未进行其他的处理,如果大家有兴趣或者有更好的方法不妨拿出来分享下哦~~

你可能感兴趣的:(asp.net)