可能很少人注意到的问题 @_@ 救命~~~~
用asp.net做的页面,如果上面有服务器控件(例如buttotn),一旦执行了一次之后,如果按刷新按钮,刚才的操作会在执行一次!!!(例如,第一次删除id为10的纪录,按刷新按钮后,就会抱错,错误的大意就是说id为10的纪录不存在)
这还是好办的,无非是try了之后不管,增加纪录可怎么办啊?刷新一次插一条……
我已经快被这问题折磨疯了,大大们救救我吧!
问题点数:0、回复次数:26Top
1 楼cdjjh(Jerry)回复于 2005-06-03 16:54:35 得分 0
说得太模糊了吧,举个例子吧Top
2 楼ahchiee(脚印满天)回复于 2005-06-03 16:55:34 得分 0
数据库操作完成之后,重新加载页面,就不会刷新就操作了。Top
3 楼LaoDai_Net(『老代』)回复于 2005-06-03 17:00:50 得分 0
加上 if( Page.IsPostBack) 试一下Top
4 楼laihua(背着石头过河)回复于 2005-06-03 17:06:12 得分 0
Response.Redirect(Request.Url.ToString());
这样就可以了,重定向一下Top
5 楼fxfeixue(小虾米)回复于 2005-06-03 17:07:32 得分 0
在 page_load 中把代码加在
If not ispostback Then
.
.
.
End If
之间试试Top
6 楼bouyuki(bouyuki)回复于 2005-06-03 17:08:04 得分 0
if( !Page.IsPostBack){
//第一次进入
}else{
/第一次/以外
}Top
7 楼judy_wane(小依达)回复于 2005-06-03 17:11:08 得分 0
同意 laihua(背着石头过河)的意见,添加完之后重新装载一下页面!!!
Response.Redirect(Request.Url.ToString());Top
8 楼meixiaofeng(yesmsn)回复于 2005-06-03 17:12:29 得分 0
accidenceTop
9 楼ocean413(地下党)回复于 2005-06-03 17:14:56 得分 0
这用任何脚本都有的问题,重定位就可以解决了!方法楼上的已说过了Top
10 楼pgy8288(Just Coding)回复于 2005-06-03 17:27:19 得分 0
If Except=2667 Then
Response.Write("记录已存在")
End IfTop
11 楼OSCAR_NJU(死刑犯)回复于 2005-06-03 17:36:06 得分 0
嗯,这个是让很多新手(我也是)忽视或者困惑的问题,其实最好就是记得每次完成一个操作后用Redirect()强制刷新页面。Top
12 楼luck0235(风平浪静时人人都能掌舵)回复于 2005-06-03 17:55:51 得分 0
这个感觉应该是思维上的细节问题,每个细节我们都应该思考的很清晰,然后作相应的处理。Top
13 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2005-06-03 18:59:10 得分 0
Redirect是使用一个大大的问题掩盖一个小问题,拣了芝麻丢了西瓜,自己不知。Redirect造成丢失了页面状态,那么“以后”你想真正深入学习asp.net的编程技巧就很难了。Top
14 楼OSCAR_NJU(死刑犯)回复于 2005-06-03 19:40:19 得分 0
to:sp1234()
我一直是用Redirect解决问题的,而且可以说我就是刻意去掉页面的视图状态,因为我的服务器控件基本上都是EnableViewState=false,因此看到你的回复我很想请教。
就我知道页面的viewstate在整个页面的大小中占很大的比例,特别是datagrid的使用,这很影响页面的运行速度。Top
15 楼judy_wane(小依达)回复于 2005-06-03 19:51:27 得分 0
to:sp1234()
同意OSCAR_NJU(死刑犯) 的说法,既然我只是添加或者删除一些东西的话,还要viewstate里面的东东做什么用呢??也没有多大的意义 呀~!!!!!Top
16 楼ksn520(泡菜.Net)回复于 2005-06-03 20:05:20 得分 0
学习ing...Top
17 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2005-06-03 20:20:41 得分 0
最简单的,例如点击DataGridf中的一行,编辑这一行。至少,这一行被选中之后会显示一个选中的模样,当页面上有另外一个按钮提交并显示与它相关的内容的时候,DataGrid的选中行的模样不应该消失吧?!否则就对用户过分的地“不友好”了。
如果你不能想象不出我说的是什么样子,那么你肯定没有做过只需要局部改变页面模样,而其它部分必须要保持原来用户操作状态的应用。
以当前这个csdn页面来说,其实非常简单,所以你看到xml。但是,假设需要编辑回帖的人动态加入表情符、在编辑自己的回帖的同时可以(右边)同时搜索相关文章并插入插入链接,等等这些稍微复杂的界面,你是否做过呢?如果做过,很容易了解为什么需要页面状态。我还没有见过一个“深入学习”asp.net 的人禁用状态。如果纯粹为了效率,这样的页面就不应该使用asp.net,应该用比asp还要简单的工具去输出html流。因为asp.net非常慢,非常复杂。只不过,没有能够达到真正的用户友好界面的开发方法的工具代替asp.net而已。Top
18 楼noyester()回复于 2005-06-03 20:38:10 得分 0
Response.Redirect(Request.RwUrl.ToString())
Top
19 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2005-06-03 20:42:42 得分 0
本来不想做广告,但是此时不得不如此。我访问了这个页面:
http://cosoft.org.cn/forum/forum.php?forum_id=8122
进去看了他们的演示。除了美工图片以外,交互性简直可以说是“惨不忍睹”。哪有什么真正的“交互”界面呢?没有交互界面,怎么可能成为商品化的应用软件呢?像这类软件的开发者只会做简单的网页,需要学习的东西太多了。Top
20 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2005-06-03 20:46:00 得分 0
学习asp.net,就是页面不要再“丑陋”,就是作为一个合格的工程师能够超越技术问题而去用心关心需求问题、表现问题。只能做出非交互界面(提交之后立刻初始化),怎么往下混呀!Top
21 楼yuyijw(恋之心)回复于 2005-06-03 21:10:01 得分 0
ViewState = falseTop
22 楼ccwq(Wind Love Rove Forever)回复于 2005-06-04 07:42:39 得分 0
public bool IsRefurbish
{
get
{
return HttpContext.Current.Request.Headers["Accept"]=="*/*";
}
}
然后在你按钮处理程序中加上
if(!IsRefurbish)
{
//正常操作;
}
else
{
//刷新操作
}Top
23 楼minghui000(沉迷网络游戏)回复于 2005-06-05 01:34:38 得分 0
up
Top
24 楼jxhwei(工羊大盗)回复于 2005-06-06 08:41:55 得分 0
两天没上网,今天一早看到这么多回复感到非常高兴。(^-^)
首先,if( Page.IsPostBack) 是没用的,因为按刷新按钮,实际上会原样重复上个页面,Page.IsPostBack的值根本就没有被改变。
laihua(背着石头过河)、OSCAR_NJU(死刑犯) 等几位大大的意见感觉还是很实际的,但还是想请教下sp1234() 大大,如果不使用Redirect,那应该怎么解决这个问题呢?我曾经想过解开viewstate集合,只把我需要清空的状态清空,其他保留,但根本找不到系统的viewstate的任何一个值……Top
25 楼jxhwei(工羊大盗)回复于 2005-06-06 13:10:19 得分 0
call sp1234()Top
26 楼jinwishing(醒醒吧Child)回复于 2005-06-06 13:35:58 得分 0
学习Top




