foreach 循环设置session,另一个页面获取session的问题。
求高手帮忙看下:
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();
//////////////////