朋友,困扰我3天的问题。急死了。本人自定义一套web页面基类,用于检验用户是否登录设置 public class BasePage : System.Web.UI.Page
{
public BasePage(): base()
{
//判断登录是否超时
this.Load += new EventHandler(this.PageInitAction);
} /// <summary>
/// 判断登录是否超时
/// </summary>
/// <param name="sender"> </param>
/// <param name="e"> </param>
private void PageInitAction(object sender, EventArgs e)
{
//检查登录是否失效
if (Session["userLogOnInfo"] == null)
{
string str = " <script> window.location.href='default.aspx';alert('您未登录或登录已失效,该操作必须登录!'); </script> ";
Response.Write(str); } }
} 功能是验证用户登录对象是否存在,不存在就跳转当前页面。 现在新的需求希望可以增加用户界面友好程度,使用弹出层(div)的形式显示登录界面,
效果是用户登录失效之后页面不直接跳转,使用div+css弹出一个登录层,让用户感觉不到变化(使用了部分axaj控件) 功能是实现了,代码如下:
/// <summary>
/// 判断登录是否超时
/// </summary>
/// <param name="sender"> </param>
/// <param name="e"> </param>
private void PageInitAction(object sender, EventArgs e)
{
//检查登录是否失效
if (Session["userLogOnInfo"] == null)
{
string str = " <script language='javascript' defer> ShowLogonPage(); </script> ";
if (!this.IsStartupScriptRegistered("ExeScript"))
this.RegisterStartupScript("ExeScript", scriptString); } }
其中ShowLogonPage()是一个封装在js的javascript函数。内部实现原理是动态添加div,
再在div中添加iframe元素,iframe的src=“default.aspx”; 但目前存在一个问题:就是如何调用了上述
" <script language='javascript' defer> ShowLogonPage(); </script> ";
代码,弹出了登录输入框之后终止后面的子类代码运行。 例如某个子类
public partial class TestPage_TestLogon : BasePage
{
protected void Button1_Click(object sender, EventArgs e)
{
Response.Write(" <script> alert('感谢'); </script> ");
}
} 在之前的方法,因为是当前页面直接跳转,所以子类的Response.Write(" <script> alert('感谢'); </script> ");这个句不会执行
但目前方法没有跳转页面,如何能在运行基类ShowLogonPage();之后终止子类的代码运行。 本人尝试过使用response.end()。但整个页面程序终止了。 望高手指点,或者有其他方法解决我目前用户界面的需求吗?谢谢。我曾经考虑过用屏蔽控件事件方法来解决,但是如何偏历一个页面,屏蔽所有控件事件,或者得知对上提交的控件,屏蔽该控件的事件?原贴地址
http://topic.csdn.net/u/20071224/09/c4cdf052-2489-470e-be7b-211ec5c661a7.html万分致谢。
{
public BasePage(): base()
{
//判断登录是否超时
this.Load += new EventHandler(this.PageInitAction);
} /// <summary>
/// 判断登录是否超时
/// </summary>
/// <param name="sender"> </param>
/// <param name="e"> </param>
private void PageInitAction(object sender, EventArgs e)
{
//检查登录是否失效
if (Session["userLogOnInfo"] == null)
{
string str = " <script> window.location.href='default.aspx';alert('您未登录或登录已失效,该操作必须登录!'); </script> ";
Response.Write(str); } }
} 功能是验证用户登录对象是否存在,不存在就跳转当前页面。 现在新的需求希望可以增加用户界面友好程度,使用弹出层(div)的形式显示登录界面,
效果是用户登录失效之后页面不直接跳转,使用div+css弹出一个登录层,让用户感觉不到变化(使用了部分axaj控件) 功能是实现了,代码如下:
/// <summary>
/// 判断登录是否超时
/// </summary>
/// <param name="sender"> </param>
/// <param name="e"> </param>
private void PageInitAction(object sender, EventArgs e)
{
//检查登录是否失效
if (Session["userLogOnInfo"] == null)
{
string str = " <script language='javascript' defer> ShowLogonPage(); </script> ";
if (!this.IsStartupScriptRegistered("ExeScript"))
this.RegisterStartupScript("ExeScript", scriptString); } }
其中ShowLogonPage()是一个封装在js的javascript函数。内部实现原理是动态添加div,
再在div中添加iframe元素,iframe的src=“default.aspx”; 但目前存在一个问题:就是如何调用了上述
" <script language='javascript' defer> ShowLogonPage(); </script> ";
代码,弹出了登录输入框之后终止后面的子类代码运行。 例如某个子类
public partial class TestPage_TestLogon : BasePage
{
protected void Button1_Click(object sender, EventArgs e)
{
Response.Write(" <script> alert('感谢'); </script> ");
}
} 在之前的方法,因为是当前页面直接跳转,所以子类的Response.Write(" <script> alert('感谢'); </script> ");这个句不会执行
但目前方法没有跳转页面,如何能在运行基类ShowLogonPage();之后终止子类的代码运行。 本人尝试过使用response.end()。但整个页面程序终止了。 望高手指点,或者有其他方法解决我目前用户界面的需求吗?谢谢。我曾经考虑过用屏蔽控件事件方法来解决,但是如何偏历一个页面,屏蔽所有控件事件,或者得知对上提交的控件,屏蔽该控件的事件?原贴地址
http://topic.csdn.net/u/20071224/09/c4cdf052-2489-470e-be7b-211ec5c661a7.html万分致谢。
解决方案 »
- c# 怎么获取月份啊??
- 我想用vs2008给一个企业做一个基于bs模式的综合业务处理平台,是用新建项目好呢,还是新建网站好?
- 登录密码验证
- 5个QQ群里没人解决的Ajax小问题:<ajax基础教程>上的一段代码,请指教~~!
- 为何提示insert数据成功access中却没有添加任何数据?
- C#.net中的web用户控件和移动web用户控件有什么区别?
- 请教关于dataview的问题
- 50分求解决分页显示问题的代码,在线等……,高手救我!
- ASP.NET Session以及浏览器关闭的问题
- 第1次提问,高手一定要帮助!
- .net 多国语言,为什么只显示默认的语系?
- VS03和VS05可以同时使用吗?
我觉得你可以在 iframe.src里加参数.
比如iframe src="default.aspx?x=1"default.aspx.cs检测有无x为1的参数, 有则表示是因为未login被别的页面调用来输出login区的,就只处理loginwin, 若无,则是正常运行的.如果有可能,那将整站改为ajax模式. 这样处理会方便很多.不过js的工作量稍大了些,另外,还要处理浏览器的兼容性.http://219.153.19.88:8800/Service.HTML以fcuandy,密码fcuandy login进去,左上方会显示连接保持. 你可以拔掉网线或禁用网卡, 左上方红字显示重连. 接上网线,又会再次连上. 这里字体的改变跟你弹出div的login区一样的道理. 个人觉得,如果是取数据,那么取数据部分可以采用ajax.
如果是显示部分以ajax来处理,那就全部采用ajax,不然搞得不伦不类的.
BasePage:
加一个验证用户函数:
protected bool CheckUser()
{
bool bRet = true;
//检查登录是否失效
if (Session["userLogOnInfo"] == null)
{
string str = " <script language='javascript' defer> ShowLogonPage(); </script> ";
if (!this.IsStartupScriptRegistered("ExeScript"))
this.RegisterStartupScript("ExeScript", scriptString);
bRet = false;
}
return bRet;
}
派生页面:
Page_Load(...)
{
if(!CheckUser())
Return;
}
1:如何在basepage的基类构造函数中结束后续代码运行(包括子类页面pageload,和请求发自页面某个控件的内部代码)
2:如果不能结束后续代码运行,能不加载改页面的控件事件方法。目的也是不去运行控件中的代码。raul_qu
你的方法只能解决终止pageload的后续代码,但如果该页面的请求发自本页面某个button控件,是不能起到终止后续代码的作用。当然,可以在每个控件都加上
if(!CheckUser())
Return;
来实现功能,但是这样工作量超大。
有其他方法吗?
asp.net 页面上任何提交服务期控件的方法必然先调用pageload事件的方法Page_load()
asp.net 页面上任何提交服务期控件的方法必然先调用pageload事件的方法Page_load()
但是执行了Page_load()之后
具体是你给出的
if(!CheckUser())Return;
之后,控件内部代码还是会执行,也就是“if(!CheckUser())Return;”只能终止Page_load()方法的代码,不能终止控件内部代码。
谢谢。
你的方法我未试过,但是估计行不通,因为你的方法是判断没有权限之后偏历页面控件,然后设置对应脚本。
但在本次,也就是判断的当前,控件的方法还是会执行(之后再产生对应脚本输出到客户端),只有在下次执行控件的时候才
会return false 有效,而我的要求是在用户触发控件之后,本次就必须可以终止控件运行的代码。我以前的做法是因为在basepage就直接跳转到其他页,所以回避了这个问题,但是现在要求客户体验改进,而且已经是成型的系统,不能太大改动(否则我就完全用ajax来实现了,现在是ajax+部分web控件)其实我想到几个思路来解决问题,不知道大家有什么意见1:用异常中断 仍出自定义exception,应该可以达到中断后续代码的效果。
2:屏蔽对应提交控件的事件方法,
例如:
btton.click -= new system ***(this.btton.click()); 屏蔽了该控件的事件方法。
但是不知道怎么获取对上请求的控件ID,而且请求不一定就是button控件,可能是GridView里面的控件。
也不知道如何偏历整个页面,获取全部事件(在vs2003可以,到vs2005就封装到其他地方了,郁闷)。