我在 ASP.NET 3.5 中有两个页面,我需要从第一页但在第二页访问/读取 Web 控件值。第二页显示的是一个链接,没有发布事件或类似的东西。
我想我应该使用 ViewState,但是对于这个任务来说它看起来很复杂,所以请告诉我一个更好的方法来实现这个。
PS 我正在使用 C# 和 Visual Studio 2010
如果我理解正确,您有两个 .aspx 页面,并且您希望一个页面与另一个页面共享信息。第一页是否链接到第二页?
我问是因为您可以采取几种方法。您可以将参数添加到第二页链接中的查询字符串中,其中包含您尝试发送的信息。您还可以使用会话来临时存储信息。
例如:
<asp:HyperLink NavigateUrl="www.<yoursite>.com/firstpage.aspx?eggs=1&bacon=yum" Text="Awesome Site" runat="server" />
在第二页中,您将在 Page_Load 的代码隐藏中拥有它
string eggs = Request.QueryString["eggs"];
string bacon = Request.QueryString["bacon"];
现在,您在第二页中获得了第一页中的值。
另一种方法可能是像这样使用 Session :
第一页:
Session["bacon"] = "Yum";
第二页:
string bacon = (string)Session["bacon"];
但是,我建议不要过度使用会话在页面之间传递信息。
有一种更好的方法是使用 QueryString 杂耍和 Session 值。
您可以只使用在跨页发布期间设置的上一页属性。
使用 asp 链接按钮:
<asp:LinkButton runat="server" id="myLink"
NavigateUrl="~/Page2.aspx"
target="_blank" Text="Go to page 2"></asp:LinkButton>
然后在Page2.aspx.cs上:
从Page.PreviousPage中获取值,如下所示:
TextBox txtUser = (TextBox)Page.PreviousPage.FindControl("txtUser");
TextBox txtSomeValue = (TextBox)Page.PreviousPage.FindControl("txtSomeValue");
在第二页中根据需要使用这些。
Quick & “Dirty”:保存要传递的信息的会话变量。
在第一页:
Session["ValueToPassToOtherControl"] = "The value";
在第二页:
var value = Session["ValueToPassToOtherControl"];
优雅:您需要以任何方式管理您的状态(通过一个静态管理器,其功能是存储和检索该信息,但这也是变量)。问题是HTTP 是无状态的。所以你需要通过某种数据的存储和检索来绕过这个限制。
您建议使用ViewState但忘记了,ViewState 是 ASP.NET 网页使用的一种技术,用于在回发期间持久更改 Web 窗体的状态,这不是您的场景中发生的情况。