关于__dopostback的问题,高分求教!

lhtyx 2003-06-28 02:56:39
我有一个页面,用了datagrid显示所有目录的邮件列表的邮件,每一行记录中有一个删除的链接:
<a href="javascript:delemail('<%# DataBinder.Eval(Container.DataItem,"id")%>')">删除</a>
而在客户端用javascript定义了:
function delemail(id)
{
if(confirm("要删除吗?"))
{
document.forms["admin_maillist_gl"].elements["emailid"].value=id;
__doPostBack("Deleteemail","");
}
}
而且同时在表单里建了一个隐藏域和一个linkbutton:Deleteemail
<input type="hidden" id="emailid" runat="server">
<asp:LinkButton ID="Deleteemail" Runat="server" OnClick="delemail_click" Visible="False"></asp:LinkButton>
意思也就是说,当点击每条记录后的删除链接,如果确认后,将会用linkbutton触发的delemail_click事件处理程序来处理删除任务。
但是现在奇怪的是:
当该页面显示是多页时,可以删除,但是当数据只够显示一页时,其后的删除链接点击后也会弹出提示框,但是却会出现脚本错误:
行:17
字符:5
错误:缺少对象
代码:0:
url:http://localhost/myflash/admin/admin_maillist_gl.aspx
也就是指示该脚本程序的__dopostback()程序出错。
该 如何解决 呢?
该页的前台代码如下:
<%@ Page language="c#" Codebehind="admin_maillist_gl.aspx.cs" AutoEventWireup="false" Inherits="myflash.admin.admin_maillist_gl" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>admin_maillist_gl</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
<link rel="stylesheet" type="text/css" href="../inc/css.css">
<script language="javascript">
function delemail(id)
{
if(confirm("要删除吗?"))
{
document.forms["admin_maillist_gl"].elements["emailid"].value=id;
__doPostBack("Deleteemail","");
}
}
</script>
</HEAD>
<body>
<form id="admin_maillist_gl" method="post" runat="server">
<input type="hidden" id="emailid" runat="server">
<asp:LinkButton ID="Deleteemail" Runat="server" OnClick="delemail_click" Visible="False"></asp:LinkButton>
<FONT face="宋体">
<div align="center">
<asp:DataGrid id="dg1" runat="server" Width="500px" AllowPaging="True" AutoGenerateColumns="False" CellPadding="5" PageSize="10">
<ItemStyle BackColor="#EFF1F3"></ItemStyle>
<HeaderStyle BackColor="#94CBFF"></HeaderStyle>
<Columns>
<asp:BoundColumn DataField="id" HeaderText="ID">
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="dz" HeaderText="地址">
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:BoundColumn>

<asp:TemplateColumn HeaderText="用户名">
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
<ItemTemplate>
<a href="javascript:window.open('admin_maillist_user_show.aspx?id=<%# DataBinder.Eval(Container.DataItem,"id")%>','','toolbar=no,width=300,height=200');void 0;"><%# DataBinder.Eval(Container.DataItem,"adname")%></a>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="intime" HeaderText="时间">
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:BoundColumn>
<asp:TemplateColumn HeaderText="编辑">
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
<ItemTemplate>
<a href='admin_maillist_edit.aspx?id=<%# DataBinder.Eval(Container.DataItem,"id")%>'>
编辑</a>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="删除">
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
<ItemTemplate>
<a href="javascript:delemail('<%# DataBinder.Eval(Container.DataItem,"id")%>')">删除</a>

</ItemTemplate>
</asp:TemplateColumn>
</Columns>
<PagerStyle Mode="NumericPages"></PagerStyle>
</asp:DataGrid>
</div>
</FONT>
</form>
</body>
</HTML>

...全文
529 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Seeko0 2003-06-29
  • 打赏
  • 举报
回复
现在的主要问题是单页的时候因为不出现__doPostBack()这个方法。治标比治本的方法是
直接对 __doPostBack("Deleteemail","");这句进行异常捕获。
try{
__doPostBack("Deleteemail","");
}
catch{
}
//看能否解决你的问题

我在想,你删除的代码写在服务端,客户端仅仅是一个确认提示,为什么要用__doPostBack((),直接让删除按钮添加客户端事件,return isdelemail(id)
function isdelemal(id){
return window.confirm("确定要删除编号为 "+id+ "的邮件吗?");
}
当然这样写的话需要在服务端代码中为DataGrid的每行都绑定这个客户端事件

fordfamily 2003-06-29
  • 打赏
  • 举报
回复
强!
lhtyx 2003-06-29
  • 打赏
  • 举报
回复
jjstar(北人) :谢谢您的提醒,我在该页面的cs页面内的page_load()里加上了:
this.GetPostBackEventReference(Deleteemail);
结果不管是多页还是一页,都可以正常执行上面的代码了。
谢谢大家。
saucer 2003-06-29
  • 打赏
  • 举报
回复
在单页的情形下,ASP.NET没生成__doPostBack的原因是因为他用的是Visible=false,在多页的情形下,由於有前后页的连接,就自动生成__doPostBack脚本了
jjstar 2003-06-28
  • 打赏
  • 举报
回复
你要注册页面引用
this.RegistPageReference或者是this.GetPageReference,到底怎么写我忘了,你敲个this到页面就会有提示的(要是VB的话就敲me),你把这句话写上,就会生成__doPostback相关代码
saucer 2003-06-28
  • 打赏
  • 举报
回复
click(), not Click()
lhtyx 2003-06-28
  • 打赏
  • 举报
回复
我改成了:
<script language="javascript">
function delemail(id)
{
if(confirm("要删除吗?"))
{
document.forms["admin_maillist_gl"].elements["emailid"].value=id;
Deleteemail.Click();
}
}
</script>
结果提示:document.forms....这一行“对象不支持此属性或方法"
saucer 2003-06-28
  • 打赏
  • 举报
回复
try

<asp:LinkButton ID="Deleteemail" Runat="server" OnClick="delemail_click" style="display:none"></asp:LinkButton>


by the way, you don't need to call __doPostBack directly, call
Deleteemail.click();
instead
lhtyx 2003-06-28
  • 打赏
  • 举报
回复
再顶一下。当只有一页时,如何让他能够回传?能够执行__dopostback()?
lhtyx 2003-06-28
  • 打赏
  • 举报
回复
当只有一页时,在html代码中没有 看到__dopostback(),当有多页时,会有__dopostback(),我在另一贴中也问到了这个问题,可是没有人能够回答这个问题。
saucer 2003-06-28
  • 打赏
  • 举报
回复
view the html source code in the browser and check if __doPostBack is generated
lhtyx 2003-06-28
  • 打赏
  • 举报
回复
再顶一下,帮忙解决一下吧。
lhtyx 2003-06-28
  • 打赏
  • 举报
回复
顶一下。

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧