Chinaunix首页 | 论坛 | 博客
  • 博客访问: 490769
  • 博文数量: 33
  • 博客积分: 4168
  • 博客等级: 上校
  • 技术积分: 675
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-26 20:21
文章分类

全部博文(33)

文章存档

2013年(8)

2012年(2)

2011年(7)

2010年(1)

2009年(4)

2008年(11)

分类: C#/.net

2013-09-26 11:39:45

    注意:本人的所有关于ExtPB.Net的系列文章,都是针对本人在ExtPB.Net作者提供的demo基础上进行的具体应用开发而言

    ExtPB.Net中的win窗体有个EditMode属性,还有事件EditModeChanged。
    这个属性有点类似于PB的Tag,大家平时可能很少注意,如果光是这个属性而已,大抵也用处不是太大,但它同时还有个EditModeChanged事件,这可不得了,它为我们解决了很多问题,例如 w_index 如何与 ts_1 中打开的窗体(包括常规的win窗口,特别是asp.net页面) 通讯,这样的问题的存在是因为在实际开发中,确实有这种需求,比例:
1)ts_1 的homepage 可能是个asp.net 页面,那么当会话过期后,必须返回到登录页面login.aspx进行重新注册,那么使用目前网上介绍的几种重定向方法(如Response.Redirect
)可能达不到理想的效果(登录页面显示在ts_1中);
2)很多基于div控制的第三方控件如果应用到ts_1内的页面中,有可能感觉到页面空间布局太小,希望展现到w_index那么大的整个窗口范围上(例如artDialog);
3)w_index 需要与 ts_1 中打开的各种窗体进行一些数据交流
等等类似的问题。

        本文现在只讨论使用editmode对第1个问题的解决。

         先看这个图:
            
    这是本人应用中的homepage页面,是个aspx的页面(取名为MyDesk.aspx),如何处理其会话过期后返回到login.aspx登录页面呢? 我在网上找了很多方法,都达不到效果,login.aspx最终还是显示在ts_1中,没有将整个应用的窗口覆盖,也即覆盖w_index,所以最后还是使用本人在前段时间跟群友讨论的editmode的技巧使用。

    方法:
    1)在MyDesk.aspx.cs 中首先检查是否登录或者是否会话过期: CheckLoginAndRedictLogin        

点击(此处)折叠或打开

  1. protected void Page_Load(object sender, EventArgs e)
  2. {
  3.      if (!Page.IsPostBack)
  4.      {
  5.           Refresh_Click(null, null);
  6.      }
  7. }
  8. protected void Refresh_Click(object sender, EventArgs e)
  9. {
  10.      AppService.CheckLoginAndRedictLogin(this);
  11.      ...
  12. }
      //AppService.CheckLoginAndRedictLogin 的定义:
      public static void CheckLoginAndRedictLogin(Page page)
      {
          if (!IsLogin())
          {
              ClientRedirectLogin(page, "/Login.aspx");
          }
      }
    2) 页面重定义方法ClientRedirectLogin

  1. ///
  2. /// 进行Login页面跳转
  3. ///
  4. /// 当前页面指针,一般为this
  5. /// 跳转的目标URL
  6. public static void ClientRedirectLogin(System.Web.UI.Page page, string url)
  7.         {
  8.             StringBuilder Builder = new StringBuilder();
  9.             Builder.Append("");
  10.             page.ClientScript.RegisterStartupScript(page.GetType(), "redirect", Builder.ToString());
  11.         }
 
3)最关键是 w_index 中的处理
    ClientRedirectLogin代码中的pw 变量获取到的实际就是w_index窗体,所以我们利用了窗体的EditModeChanged事件而解决重定向到login.aspx页面去。
    以下是w_index.win.js中的处理:

  1. //#region this.EditModeChanged -- 其他窗体改变了这个窗体的EditMode属性时触发
  2. this.EditModeChanged = function () {
  3.      var param = requestor.GetEditMode();
  4.      if (param == "") return;
  5.      var paramObj = eval("(" + param + ")");
  6.      if (paramObj.id == "login") {
  7.         window.navigate(paramObj.url);
  8.         return;
  9.      }
  10.      ...  //其它代码,另文讨论
  11. }
至此,顺利解决了第1个问题。




 



阅读(2428) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~