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>

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

转载于:https://www.cnblogs.com/zcylife/archive/2012/09/26/2703232.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值