2011-08-09 186 views
0

我将执行暗示密码重置功能。第一位用户在表单中输入电子邮件。然后点击提交。在服务器端,我检查电子邮件是否正确以及用户是否存在于数据库中,如果是,则重定向到下一页(实际上它与questry字符串参数?step = 2相同)。在页面之间传递数据asp.net

因为loadBalancer,我不能使用会话。什么是保持用户邮件的最佳方式?

感谢您的帮助

+1

您对数据库的电子邮件,不是吗? – Saeed

+0

您可以使用[数据库支持的会话状态](http://support.microsoft.com/kb/317604)。但为什么重定向?你不能只使用传输来呈现那里的页面,然后当你仍然有电子邮件地址写入页面? – Rup

+0

我不明白,使用传输意味着什么? – gruber

回答

1

如果是同一个页面,那么它应该是相当微不足道。你可以在你的按钮单击处理程序添加一个隐藏输入字段并将它添加到您的表格,以便:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    string email = email.Text; 
    //Check database etc 

    HtmlInputHidden hidden = new HtmlInputHidden(); 
    hidden.Value = email; 
    hidden.ID = "hiddenemail"; 
    form1.Controls.Add(hidden); // Where form1 is the ID of a form with runat=server 
} 

或事件更好,如果有一个现有的服务器控件说,你可以用你的标签将只是做:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    string email = email.Text; 
    //Check database etc 
    Label1.Text = email; // Where Label1 is the ID of a ASP:Label on your page 
} 
+0

其实无视我的回答,我显然没有正确地阅读你的问题 –

1

如果您不想使用回发(无论出于何种原因)并且无法使用Session,我所看到的唯一解决方案是将电子邮件包含在查询字符串中。

Response.Redirect("MyPage.aspx?step=2&email=" + Server.UrlEncode(emailaddr));

如果它不一定是一个重定向,看到詹姆斯干草的答案。

0

我真的不明白这里的问题?

如果您在数据库中有电子邮件,这意味着您还拥有数据库中的所有其他信息。因此,跳过所有重新加载页面等,然后继续使用<asp:Panels><asp:Views>作为可见= false/true之间的交换不需要页面重新加载回发。

if(email == emailFromDB) 
{ 
    panelStep1.visible=false; 
    panelStep2.visible=true; 

    // Insert information into whatever controls you have in mind. 
}