foreach 循环设置session,另一个页面获取session的问题。

zhujinpengliang 2013-05-07 12:03:42
求高手帮忙看下:

1. A.aspx 获取若干收件人地址到dataset 1,若干发件人到dataset 2
2.foreach遍历dataset 1获取收件人,随机获取dataset 2 的发件邮箱地址及密码
3.每发送一条邮件,判断是否发送成功,无刷新 显示发送结果,并将结果更新设置到session
4.B.aspx 通过UpdatePanel 每隔一秒获取session,显示发送成功数量和失败数量
结果:B.aspx 只能等A.aspx 循环执行完毕才能获取到最终的session。

原先用的ajax,发现ajax回传信息时间不准确

问题:
1.可以在循环中赋值和获取session?
2.有什么高效的办法可以实现这一功能(一边发送,一边无刷新实时显示发送结果)

A.aspx.cs
////
int fs=0;
int sb=0;
foreach( DataRow drmail in dsmail.Tables[0].Rows ) //遍历收件人邮箱地址
{
Thread.Sleep(2000); //延时2秒
Random rd = new Random();
int i = rd.Next(0, snum - 1); // 随机获取发件人邮箱服务器
DataRow drserver = dsserver.Tables[0].Rows[i];
string smtp = drserver["Smtpserver"].ToString();//smtp地址
string frommail = drserver["Mailserver"].ToString();//发件人地址
string pwd = drserver["Password1"].ToString();//发件人密码
string tomail =drmail["Mailadd"].ToString();// 收件人地址
bool issend = Helper.Sendmail.testmail(tomail, mailtitle, frommail, pwd, smtp, mailname, mailbody);
if (issend) //发送成功
{
bllserver.UpdateFS(int.Parse(drserver["ID"].ToString())); //保存结果到数据库
Session["fs"] = fs++; //成功数+1
}
else //发送失败
{
bllserver.UpdateSB(int.Parse(drserver["ID"].ToString()));
Session["sb"] = sb++; //失败数+1
}



B.aspx
//////////////////
<asp:ScriptManager ID="ScriptManager1" AsyncPostBackTimeout="0" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" >
<ContentTemplate> <p style=" margin-top:70px; height:25px; text-align:center;">发送总数:<asp:Label ID="Label1" runat="server" ForeColor="Red" Text="Label" Width="35px"></asp:Label>已发送:<asp:Label ID="Label2" runat="server" Text="Label" ForeColor="Red" Width="35px"></asp:Label>发送失败:<asp:Label ID="Label3" runat="server" Text="Label" ForeColor="Red" Width="35px"></asp:Label> </p>
<asp:Timer ID="Timer1" runat="server" Interval="1000"> </asp:Timer>
</ContentTemplate>
<Triggers><asp:AsyncPostBackTrigger ControlID="Timer1" /></Triggers>
</asp:UpdatePanel>
/////////////
///////
B.aspx.cs
Label1.Text = Session["num"].ToString();
Label2.Text = Session["fs"].ToString();
Label3.Text = Session["sb"].ToString();
//////////////////
...全文
418 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
喂大的程序员 2013-05-08
  • 打赏
  • 举报
回复
引用 7 楼 zhengceHH 的回复:
异步的时候时间怎么会不准确?
我想到的也是异步通信
喂大的程序员 2013-05-08
  • 打赏
  • 举报
回复
异步的时候时间怎么会不准确?
zhujinpengliang 2013-05-07
  • 打赏
  • 举报
回复
请高手给些提示
md5e 2013-05-07
  • 打赏
  • 举报
回复
Session不是立刻生效的,要页面加载完才能生效,所以你的方法不可取,只能用ajax方式实现 Session保存记录集,ajax每次通过rowindex请求发送哪条信息
zhujinpengliang 2013-05-07
  • 打赏
  • 举报
回复
引用 3 楼 liuchaolin 的回复:
[quote=引用 2 楼 zhujinpengliang 的回复:] 还有其他的办法没?
Response.Clear(); Response.Write("创建到第"+ n +"条"); Response.Flush()[/quote] 另一个页面如何获取呢?
shenqing1201 2013-05-07
  • 打赏
  • 举报
回复
你要的是这边发送邮件,哪边实时显示发送结果对吧。这样的效果不一定要用session的哦,可以用txt记事本或者数据库临时表来处理的。
md5e 2013-05-07
  • 打赏
  • 举报
回复
引用 2 楼 zhujinpengliang 的回复:
还有其他的办法没?
Response.Clear(); Response.Write("创建到第"+ n +"条"); Response.Flush()
zhujinpengliang 2013-05-07
  • 打赏
  • 举报
回复
还有其他的办法没?

62,073

社区成员

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

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

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

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