none
使用Response.Redirect重定向的页面,不能触发button事件 RRS feed

  • 问题

  • 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页面。结果可想而知,就是刷新了一下页面而已。现在不知道如何解决,才能够触发按钮事件。
    2012年8月16日 9:11

答案

  • 按钮事件必须先有按钮对象,才能触发这个事件。

    按钮对象存在于页面之上,没有页面也就没有按钮。

    页面对象在请求到服务器之后,对处理程序映射之后才会创建。

    你现在在 BeginRequest 中就已经重定向了,连页面对象都没有,自然不会触发按钮事件了。

    你在这里的重定向要做什么呢?如果没有什么需要处理,删掉重定向的代码,自然就解决了。


    冠军

    2012年8月16日 14:08
  • 你这个button的button_click事件是服务端的还是客户端的?如果是服务端的,是需要postback的,就会刷新,如果是客户端的在button_click事件内return false.
    2012年8月17日 11:35
    版主

全部回复

  • 按钮事件必须先有按钮对象,才能触发这个事件。

    按钮对象存在于页面之上,没有页面也就没有按钮。

    页面对象在请求到服务器之后,对处理程序映射之后才会创建。

    你现在在 BeginRequest 中就已经重定向了,连页面对象都没有,自然不会触发按钮事件了。

    你在这里的重定向要做什么呢?如果没有什么需要处理,删掉重定向的代码,自然就解决了。


    冠军

    2012年8月16日 14:08
  • 你这个button的button_click事件是服务端的还是客户端的?如果是服务端的,是需要postback的,就会刷新,如果是客户端的在button_click事件内return false.
    2012年8月17日 11:35
    版主