我有登录页面,登录后我创建了一个会话变量来存储UserName。 我已经使用此变量从Account表中使用AccountID,名称等检索此用户的信息,并使用标签(lblAccountID)返回页面上的AccountID。
我有一个“添加资金”按钮到此帐户,该按钮重定向到AddFunds.aspx页面
如何将AccountID传递到AddFunds.aspx页面,该页面将用于将详细信息插入具有AccountID的Funds表中。
我不希望AccountID在AddFunds.aspx页面上可见。
答案 0 :(得分:28)
有多种方法可以实现这一目标。我可以向您简要介绍一下我们在日常编程生命周期中使用的4种类型。
请仔细阅读以下内容。
1个查询字符串。
<强> FirstForm.aspx.cs 强>
Response.Redirect(“SecondForm.aspx?Parameter=” + TextBox1.Text);
<强> SecondForm.aspx.cs 强>
TextBox1.Text = Request. QueryString["Parameter"].ToString();
当您传递整数类型的值或其他短参数时,这是最可靠的方法。如果您在通过查询字符串传递值时使用值中的任何特殊字符,则此方法更进一步,您必须先编码该值将它传递到下一页。所以我们的代码片段将是这样的:
<强> FirstForm.aspx.cs 强>
Response.Redirect(“SecondForm.aspx?Parameter=” + Server.UrlEncode(TextBox1.Text));
<强> SecondForm.aspx.cs 强>
TextBox1.Text = Server.UrlDecode(Request.QueryString["Parameter"].ToString());
<强> 2。通过上下文对象传递值
通过上下文对象传递值是另一种广泛使用的方法。
<强> FirstForm.aspx.cs 强>
TextBox1.Text = this.Context.Items["Parameter"].ToString();
<强> SecondForm.aspx.cs 强>
this.Context.Items["Parameter"] = TextBox1.Text;
Server.Transfer(“SecondForm.aspx”, true);
请注意,我们使用Server.Transfer而不是Response.Redirect导航到另一个页面。我们中的一些人也使用Session对象传递值。在该方法中,值存储在Session对象中,然后从第二页的Session对象中拉出。
第3。将表单发布到另一个页面而不是PostBack
通过将页面发布到另一个表单来传递值的第三种方法。这是一个例子:
<强> FirstForm.aspx.cs 强>
private void Page_Load(object sender, System.EventArgs e)
{
buttonSubmit.Attributes.Add(“onclick”, “return PostPage();”);
}
我们创建一个javascript函数来发布表单。
<强> SecondForm.aspx.cs 强>
function PostPage()
{
document.Form1.action = “SecondForm.aspx”;
document.Form1.method = “POST”;
document.Form1.submit();
}
TextBox1.Text = Request.Form["TextBox1"].ToString();
这里我们将表单发布到另一个页面而不是自己。您可能会使用此方法在第二页中获取viewstate无效或错误。处理此错误的方法是放置EnableViewStateMac=false
<强> 4。另一种方法是为跨页回发添加控制的PostBackURL属性
在ASP.NET 2.0中,Microsoft通过为跨页回发添加控制的PostBackURL属性解决了这个问题。实现是设置一个控制属性的问题,你就完成了。
<强> FirstForm.aspx.cs 强>
<asp:Button id=buttonPassValue style=”Z-INDEX: 102″ runat=”server” Text=”Button” PostBackUrl=”~/SecondForm.aspx”></asp:Button>
<强> SecondForm.aspx.cs 强>
TextBox1.Text = Request.Form["TextBox1"].ToString();
在上面的例子中,我们正在分配按钮的PostBackUrl属性,我们可以确定它将发布的页面而不是它自己。在下一页中,我们可以使用Request对象访问上一页的所有控件。
您还可以使用PreviousPage类访问上一页的控件,而不是使用经典的Request对象。
<强> SecondForm.aspx 强>
TextBox textBoxTemp = (TextBox) PreviousPage.FindControl(“TextBox1″);
TextBox1.Text = textBoxTemp.Text;
正如您所注意到的,这也是在页面之间传递值的简单而干净的实现。
答案 1 :(得分:1)
您需要将其存储在会话变量中:
int AccountIdVar;
Session["AccountID"] = AccountIdVar;
然后您可以稍后通过
检索int AccountIdVar = (int)Session["AccountID"];
答案 2 :(得分:0)
您可以使用您在上一页中存储的会话变量,因为它仍然可以访问,或者通过查询字符串传递ID,例如www.foofoofoo.com?Id=23456。
答案 3 :(得分:0)
正如其他人所说,您可以使用Session或Querystring值。您也可以POST to the new page
How To Pass Values Between Pages页面也值得一看。
答案 4 :(得分:0)
关于Pass Values Between ASP.NET Web Pages的MSDN
文章是最适合寻找的地方。
答案 5 :(得分:0)
为此,我们还可以使用Global变量,创建一个模块类,声明所有具有公共数据类型的变量,然后分配值。分配值后,可以从任何地方访问它。