注意:本人的所有关于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
-
protected void Page_Load(object sender, EventArgs e)
-
{
-
if (!Page.IsPostBack)
-
{
-
Refresh_Click(null, null);
-
}
-
}
-
protected void Refresh_Click(object sender, EventArgs e)
-
{
-
AppService.CheckLoginAndRedictLogin(this);
-
...
-
}
//AppService.CheckLoginAndRedictLogin 的定义:
public static void CheckLoginAndRedictLogin(Page page)
{
if (!IsLogin())
{
ClientRedirectLogin(page, "/Login.aspx");
}
}
2) 页面重定义方法ClientRedirectLogin
-
///
-
/// 进行Login页面跳转
-
///
-
/// 当前页面指针,一般为this
-
/// 跳转的目标URL
-
public static void ClientRedirectLogin(System.Web.UI.Page page, string url)
-
{
-
StringBuilder Builder = new StringBuilder();
-
Builder.Append("");
-
page.ClientScript.RegisterStartupScript(page.GetType(), "redirect", Builder.ToString());
-
}
3)最关键是 w_index 中的处理
ClientRedirectLogin代码中的pw 变量获取到的实际就是w_index窗体,所以我们利用了窗体的EditModeChanged事件而解决重定向到login.aspx页面去。
以下是w_index.win.js中的处理:
-
//#region this.EditModeChanged -- 其他窗体改变了这个窗体的EditMode属性时触发
-
this.EditModeChanged = function () {
-
var param = requestor.GetEditMode();
-
if (param == "") return;
-
var paramObj = eval("(" + param + ")");
-
if (paramObj.id == "login") {
-
window.navigate(paramObj.url);
-
return;
-
}
-
... //其它代码,另文讨论
-
}
至此,顺利解决了第1个问题。
阅读(2428) | 评论(0) | 转发(0) |