asp 有response.write(<.....>)弹出后页面布局失效解决方法

本文提供了两种解决在删除记录后弹窗导致页面布局变化的方法。第一种方法使用history.back()简单返回上一页,但存在局限性。第二种方法通过客户端脚本实现页面刷新并显示消息,更为实用。

在删除一条记录后,弹出窗口后页面布局改变,很郁闷。。。。

解决方法1:

在原来的跳转语句后面加上history.back();变为

page.Response.Write("<script>alert('demo');history.back()</script>");

缺点:弹出窗口后页面布局是不会变了,但是页面也没有重新加载,在删除一条记录成功后,又返回了第一次加载的页面;

解决方法2:用page.ClientScript.RegisterStartupScript() 方法

           1.创建一个stringBulider对象,拼接scirpt 最后用page.ClientScript.RegisterStartupScript(page.GetType(),"",Builder.ToString());

           源码如下:
public void showmsganddir(System.Web.UI.Page page, string msg, string url)
        {
            StringBuilder Builder = new StringBuilder();
            Builder.Append("<script language='javascript' defer>");
            Builder.AppendFormat("alert('{0}');", msg.Replace("\r\n", string.Empty));
            Builder.AppendFormat("top.location.href='{0}'", url);
            Builder.Append("</script>");
            page.ClientScript.RegisterStartupScript(page.GetType(),"",Builder.ToString());

        }

明白了!你指出错误是从这一行开始报错的: ```asp If Not rsMain.EOF Then ``` 错误信息是: > **“对象关闭无法操作”**(也可能是:`Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.`) --- ### ❗问题分析 这个错误说明你正在操作一个 **已经关闭** 或者 **无效** 的 `ADODB.Recordset` 对象(即 `rsMain`)。 #### 常见原因如下: | 原因 | 说明 | |------|------| | ✅ 1. SQL 语句执行失败 | `rsMain` 没有正确赋值(可能是 `conn.Execute` 出错) | | ✅ 2. Recordset 已关闭 | 在之前某处调用了 `rsMain.Close` 或 `Set rsMain = Nothing` | | ✅ 3. 查询没有返回记录 | `rsMain.EOF = True`,但你仍然尝试读取字段值 | | ✅ 4. 数据库连接中断 | `conn` 被提前关闭或出错,导致 `rsMain` 失效 | --- ### ✅ 解决方案 #### ✅ 1. 添加错误检查,确保 `rsMain` 是一个有效对象 ```asp Set rsMain = conn.Execute(sqlMain) ' 检查是否出错 If Err.Number <> 0 Then Response.Write "执行 SQL 出错: " & Err.Description Response.End End If ' 检查 rsMain 是否有效 If rsMain Is Nothing Then Response.Write "rsMain 对象无效" Response.End End If ' 检查是否为空结果集 If rsMain.EOF Then Response.Write "查询结果为空" rsMain.Close Set rsMain = Nothing Response.End End If ``` --- #### ✅ 2. 使用 `BOF` 和 `EOF` 双重判断 ```asp If Not rsMain.BOF And Not rsMain.EOF Then ' 开始处理数据 Do While Not rsMain.EOF ' 处理逻辑... rsMain.MoveNext Loop Else Response.Write "没有符合条件的数据需要更新。" End If ``` --- #### ✅ 3. 确保 `rsMain` 没有被提前关闭 检查代码中是否在 `If Not rsMain.EOF Then` 之前意外调用了: ```asp rsMain.Close Set rsMain = Nothing ``` --- #### ✅ 4. 完整修复代码示例 ```asp Dim rsMain On Error Resume Next Set rsMain = conn.Execute(sqlMain) If Err.Number <> 0 Then Response.Write "执行 SQL 出错: " & Err.Description Response.End End If If rsMain Is Nothing Then Response.Write "rsMain 对象无效" Response.End End If If rsMain.EOF Then Response.Write "查询结果为空" rsMain.Close Set rsMain = Nothing Response.End End If If Not rsMain.BOF And Not rsMain.EOF Then Do While Not rsMain.EOF Dim noValue, itemValue noValue = rsMain("no") itemValue = rsMain("item") Dim sqlUpdate sqlUpdate = "UPDATE mfg_tb_newtraining_final_result " & _ "SET WR_CERTIFY = '0' " & _ "WHERE empno = '" & noValue & "' " & _ "AND COURSE_ID IN ( " & _ " SELECT COURSE_ID " & _ " FROM mfg_tb_newtraining_course " & _ " WHERE COURSE_NAME = '" & itemValue & "' " & _ ")" On Error Resume Next conn.Execute(sqlUpdate) If Err.Number <> 0 Then Response.Write "更新失败: " & noValue & " - " & itemValue & ",错误: " & Err.Description & "<br/>" Err.Clear Else Response.Write "更新成功: " & noValue & " - " & itemValue & "<br/>" End If On Error GoTo 0 rsMain.MoveNext Loop Else Response.Write "没有符合条件的数据需要更新。<br/>" End If rsMain.Close Set rsMain = Nothing ``` --- ### ✅ 其他建议 - 使用 `Command` 对象和参数化查询,避免 SQL 注入和类型错误。 - 所有数据库对象使用完后都应关闭并设为 `Nothing`。 - 建议将 SQL 放在数据库中调试,确保语句在数据库客户端(如 PL/SQL Developer)中能正常运行。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值