我的问题是我想传递一个标签和隐藏控件的值,它们位于datalist中,位于page1.aspx中,我想在page2.aspx中访问这些值。如何在单击“提交”按钮时将值获取到另一个页面。我们有没有更好的选择,没有使用会话,server.transfer,request.querystrings等。请。救命。我正在使用母版页。我们可以使用上一页吗?如果是这样的话。建议我一个更好的解决方案。提前谢谢。
答案 0 :(得分:1)
是的,您可以通过跨页帖子使用PreviousPage
。
首先,在第一页上指定PostBackUrl
控件的<asp:Button>
属性以指向第二页。
接下来,在第二页上设置PreviousPage
指令:
<%@ PreviousPageType VirtualPath="~/first.aspx" %>
当第二页收到回发时,从第一页获取您需要的数据:
Page previous = Page.PreviousPage;
if (previous != null)
{
Label label = (Label)previous.FindControl("myLabel");
if (label != null)
{
string text = label.Text;
}
}
答案 1 :(得分:0)
如果您使用隐藏的输入元素,那么它的值将通过Request.Form
提供,例如
Page1.aspx中的HTML
<input type="hidden" name="country" value="Norway" />
Page2.aspx中的C#
var country = Request.Form["country"]; // "Norway"
答案 2 :(得分:0)
您肯定已经消除了许多在页面之间持久保存数据的常用方法。除了queryString参数之外,还有隐藏的表单值(Adam的示例)和Cookie,它们也可以从Request对象访问。如果数据相对较小且不是特别敏感,您可以将其写入用户计算机上的cookie。
或者,您需要某种持久性机制来保存数据。您可以将信息写入Web服务器上的文件。明显的缺点是你需要有更复杂的逻辑来确保每个用户的数据保持独立,你基本上需要创建自己的会话管理逻辑。
我想到的另一个选择是将信息保存到数据库中。除非您需要存储和管理大量复杂数据,否则在大多数情况下这确实不是一个可行的选择。它还带有与文件存储机制相同的大部分缺陷。
答案 3 :(得分:0)
除非性能是真正的问题,否则请使用Session。