在我们的WEB程序是,我遇到用户登陆后,一段时间没操作,
然后不小心真了一堆数据,突然提示超时,然后转到其它页面(用session来处理是否登陆).
这样一来刚才填的数据库丢了.
另外,如果A页面出来错误,一般是以跟参数形式转到错误页,但这样好像也不大好.
不知大家有什么好的办法处理异常,不好的地方如:
1.错误信息在URL可以看到.
2.如果要转回刚才出错/或出错之前的页面,非得跟连接.
3.如果是根目录下好几级的子目录下,向上转要硬编写返回和转向路径.
等.
所以特别在此向有经验的朋友请教.
谢.
然后不小心真了一堆数据,突然提示超时,然后转到其它页面(用session来处理是否登陆).
这样一来刚才填的数据库丢了.
另外,如果A页面出来错误,一般是以跟参数形式转到错误页,但这样好像也不大好.
不知大家有什么好的办法处理异常,不好的地方如:
1.错误信息在URL可以看到.
2.如果要转回刚才出错/或出错之前的页面,非得跟连接.
3.如果是根目录下好几级的子目录下,向上转要硬编写返回和转向路径.
等.
所以特别在此向有经验的朋友请教.
谢.
解决方案 »
- 求正则html脚本过滤,一个完善的过滤库,精准的过滤,谁有吗???
- 关于外链的问题
- asp.net可以实现这样的功能吗?
- SQLDataReader和SQLDataAdapter
- "正由另一进程使用"的错误,怎么解决?
- 自动生成html页面且同时绑定一个域名(求解决方案或事例代码)
- 关于Regex.Split分割字符串.救助
- Asp.Net中Sql连接字符串问题,急急急,在线等,高手进
- 普通网页 html 怎么加载的时候就变成全屏幕??
- 在asp.net中怎么控制扫描仪啊?
- 如何将ASPX的所有控件(服务器控件、客户端控件)解析出来并动态转换成HTML控件,在一个HTML文件中表现出来?
- asp.net从数据库读出HTML代码的前台显示问题。
但是遇到一个考虑了好久,始终没有得到最好办法的问题.
特此请教!
1.对于 web 中大家是如何做异常处理的.
其中有影响决定的有:
1.1 有的页面是在 IFrame有某个框架中出来的,那么如果按一般Response.Rdirect()到错误页面好像是不可行.
1.2 如果Response.Redirect("")过去,那么错误信息如果也是直接Error.aspx?msg=Some error message.觉得也不行.
1.3 如果错误发生后,可以怎么操作呢?返回(history.go(-1)还是如何?
1.4 如果直接在try{}catch{}中catch(System.Exception)好像不符合设计,并且直接在引发处定义错误信息也不便 于将来对错误信息的纠正.2.如果遇到页面 Session("")的超时?如何检测呢?
谢谢.
这是我不解的,或者做得不够好的.
希望有朋友能给我些帮助.
写一个错误类数组,把出现的错误都放在一个数组里:错误时返回:Err.aspx?Errtype=1
然后读去错误类型,再输入错误类型
2.如果要转回刚才出错/或出错之前的页面,非得跟连接.
history.go(-1) or window.location.go.back()3.如果是根目录下好几级的子目录下,向上转要硬编写返回和转向路径.
等.
所以特别在此向有经验的朋友请教.
谢..如果遇到页面 Session("")的超时?如何检测呢?
写个检测类
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Me.UserID = "" Then
HttpContext.Current.Response.Write("<script>alert('您没有登录或超时了!请重新登陆');window.location.href='../UserLogin.aspx';</script>")
End If
End Sub
HTTP就这个样...无状态协议嘛返回错误页的处理很简单
登陆处理完以后 转到request.RawUrl 就可以了
或者你用FORM验证,自动跳转回前一个页面
使用try{}catch{}得出错误号,传给错误页(还考虑用Server.Transfer()吗?).错误页调用自定义异常类.2.如果要转回刚才出错/或出错之前的页面,非得跟连接.
history.go(-1) or window.location.go.back()3.如果是根目录下好几级的子目录下,向上转要硬编写返回和转向路径.
~,不过.net支持得不太好4.如果遇到页面 Session("")的超时?如何检测呢?
写个检测类,如楼上朋友写的.也可以周期性定时检测!另外,最好是在新窗口中登录,这样,在原窗口所填的数据就不会丢(看你验证是如何写的了).
个人现在解决想法如下,如果有更好或我的错语之处,请告之:
把错误编码和内容定义在error.xml中.
然后定义一个继承于applicationException的类(MyException).
再定义二个枚举吧
enum Target{ Self=0,Parent}// 用于确认是在IFRAME中还是一般窗口.
enum Errors{AccessDeny=1001,....}//所有的异常编码.
在每个页面中throw new MyException("Error Message",Target.Self);
然后在MyException的构造里都调用
ProccessException()方法(此方法由构造函处调用,统一化参数,可以重载多个版本).
ProccessException(Errors error,Target target)
{
if(target == Target.Self)
{
Response.write("<script>window.location.href=error.aspx?c="+error.ToString()+";</script>");
}else
{
Response.write("<script>window.parent.location.href=...;</script>");
}
return;
}最后在error.aspx 的Page_OnLoad()方法中取C参数.
同时把error.xml全部内容读入并缓存在自定集合或hashtable中用C码作为KEY.
然后直接返回相应的错误内容.(根据传入的C码,配对相应的节点).
最后就直接显示.当然错误页可以用history.go(-1)或传递需要返回的参数给Error.aspx
sample:
public Page_OnLoad(object sender ,EventArgs e)
{
if(Request["C"] != null)
{
ShowErrors(Request["C"]);
}
}private void ShowErrors(string errorCode)
{
if(errorHash == null) InitErrorList();//初始化错误内容.同时加入Cache中.
if(errorHash .Contains(errorCode)) //如果不存在说明错误没有定义,可以弄个默认的.
{
strErrorDetails = errorHash.Get(C).value;
this.lblErrorDetails.Text = strErrorDetails;
}
}以上方法还没有经过完整测试,尚在构思之中.只是上来看到大家这么热心回复.
我也就冒昧的把自已这几天思索的结果奉上,如果大家认为有什么改进或不对的
请转告.谢谢!
HTTP就这个样...无状态协议嘛返回错误页的处理很简单
登陆处理完以后 转到request.RawUrl 就可以了
或者你用FORM验证,自动跳转回前一个页面
如果一个页面在onload时就发生错误,那么取得它再返回这就不好办了?其实感觉要解决的问题很多(可能是我很菜的原因).;(
超时的解决办法我是靠 JavaScript和AJAX实现,办法如下:function CheckSessionState()
{
window.setInterval("IsTimeOut();",199990);
}
function IsTimeOut()
{
// AJAXj里注册了 main,同时可以不要再调用callback,直接在这处理返回值.
main.IsTimeOut(CallBack);
}
function CallBack(r)
{
if(r.error != null)
{
alert(r.error);
return;
}else{
var isTimeOutNow = r.value;
if(isTimeOutNow == 0)
{
alert("登陆已超时,请重新登陆!");
window.parent.location.href="./userlogin.aspx";
}
return;
}
}
<body onload="checkSessionState();">
通过这样,到时就会自动用js弹出超时的信息,并且退到登陆界面.