RT。我用HttpModule代理的形式,实现页面重定向,局部代码如下:
public class UrlReWriteHttpModule : IHttpModule
    {
        public UrlReWriteHttpModule()
        {
            //
            //TODO: 在此处添加构造函数逻辑
            //
        }
        public void Dispose()
        {
            //throw new Exception("The method or operation is not implemented.");
        }        public void Init(HttpApplication context)
        {
            context.BeginRequest += new EventHandler(context_BeginRequest);
        }
        void context_BeginRequest(object sender, EventArgs e)
        {
          (此处省略了一些代码)
           HttpContext Context = (sender as HttpApplication).Context;
           Context.Response.Redirect(DictionaryClass.Str_FakePath);
        }
     }
使用这种方式生成了index.aspx页面,点击页面上的按钮button,并不能触发到button_Click事件,而是再次进入HttpModule代理,去请求index.aspx页面。结果可想而知,就是刷新了一下页面而已。现在不知道如何解决,才能够触发按钮事件。

解决方案 »

  1.   

    你应该判断当前请求在怎样的情况下,才会去转向比如
    Context.Request.QueryString["ID"]  而不是所有的请求都会去转向
      

  2.   

    判段下是POST还是GET是 POST不重定向
      

  3.   

    谢谢你的回答,明白你的意思,但现在主要的矛盾似乎在于事件绑定失效的问题,而不是判断是否转向的问题。因为在判断是否转向之前,前提的request请求已经是错的了,依然是index.aspx
      

  4.   

     你的事件是POST到本页面所以还会进入context_BeginRequest
     所以是刷新了一下
     你可以用httphandler来代替IHttpModule 来实现指定 只接收GET请求
     <httpHandlers>
     <add verb="get" path="path" type="type" />
      </HttpModules>
      

  5.   

    嗯,终于知道了是POST导致的,但目前可能不能用httphandler。原因如下:我想对某些.aspx请求重写为.html请求,然后Redirect到.html的页面;那么同理可知httpHandlers就必须处理.aspx请求了。但是此时问题就来了,我设立了一个规则:如果传入的.aspx请求,在路径转换的字典中,找不到对应的.html路径,则按原地址返回(还是.aspx),那么.aspx又被httpHandlers接管了,结果造成死循环。请教下,现在该如何处理呢?
      

  6.   

    问题解决了。其实可以把匹配规则变通一下:如果.aspx请求,能在路径转换的字典中找到对应的.html路径,则Redirect到.html路径;如果匹配不到,则不对当前的.aspx请求作任何处理(也就是不要Redirect它)。新人第一贴,纯散分~O(∩_∩)O哈哈~