Asp.net 提前获取页面点击事件

     很久都没有做过Web方面的应用了,对于Asp.net也感觉很陌生,由于工作上的需要最近又必须重新找回自己面对asp.net的信心。

     只说了两句废话,加上这一句。

     言归:开始今天的主题

 

    提出问题:

      我们知道Web页面回调的执行过程 “ 初始化-> 加载 ->事件” 当然这里简化了中间的其他过程,现在如果有这样一个业务逻辑是

      1:当页面第一次加载的时候需要执行规定的一段代码 Code_A。

      2:当点击页面按钮进行回调的时候,需要在“加载”过程中判断当前点击的是“按钮A“、还是”按钮B“,如果是”按钮A“ 执行Code_A ,之后再执行按钮A所对应的Click事件。

 

 

     处理第一个逻辑其实“地球人”都知道哪就是使用 Page.IsPostBack 方式来判断页面是否为第一次加载。

    但是处理第二个逻辑其实并不是所有的“地球人”都知道,这种情况也是本人在实际的开发过程中确实碰到的,当然这种情况不是经常性的,我在网上Google过可是结果告诉我可能需要自己发点时间研究其中的实现技巧。

 

    解决问题:

       如果能在 Page_Load 过程中事先得知当前页面点击的是哪个按钮这个问题就解决了,可是我们需要通过什么样的方式才能在按钮点击事件执行前取得了,网上有些方法是通过添加一个 input type="hidden" 中间控件,先执行按钮对应的点击事件脚本给 input 赋值,服务端代码通过 input 的赋值来得知是哪个按钮的点击产生了回调,当然这种方式确实能解决我的问题,只是本人感觉有些诡异、也增加了页面原有的复杂度,所以希望能找到另外一种更加简便、可读性强的方式。

      其实分析Asp.Net Web页面调用的方式,可以肯定的说在页面的视图状态里面一定存放了按钮触发事件的相关信息,我们只要找到它,问题就解决了。

      让我们一起来调试:当页面第一次加载的时候(也就是页面被第一次Get时)视图状态是空的,但是点击按钮回调时我们就能跟踪到实际存放的值,看看其中是否事件相关的视图状态值,

     

   在Page.Request.Form所存放的视图状态中 "__EVENTTARGET" 、 "__EVENTARGUMENT"、"__EVENTVALIDATION" 这三个值都是用来存放页面发生回调时所对应的事件相关信息。

   看看里面存放的是什么值,继续调试....

  

   没有错就是我们需要的东东, "__EVENTTARGET" 代表触发事件的目标控件的唯一标示码,注意这里不是我们通常理解的客户端ID(ClientID) 而是 控件所对应的服务端ID(UniqueID), "__EVENTARGUMENT" 是点击按钮后附加值,一般用在多按钮控件来区分具体是哪个按钮被点击、如菜单、ToolBar 等。"、"__EVENTVALIDATION"  是事件所关联的数据了,本人是没办法看懂它的,其实我们只需“"__EVENTTARGET” 就能解决问题了,代码如下:

  

    

 

  总结:

       其实跟踪视图状态得到触发事件目标的整个过程相对还是比较简单的,也希望此方法能帮助到大家,写累了。

  说明:可能大家很诧异为什么要这样,其实执行Code_A的代码是为确保和上一次的视图状态统一。

  完...............................................

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值