我在ASP.NET 3.5中有两个页面,我需要从第一页但在第二页上访问/读取Web控件值。第二页正在显示一个链接,没有发布事件或类似的东西。
我想我应该使用ViewState,但它看起来很复杂,所以请让我知道一个更好的方法来实现这一目标。
P.S我正在使用C#和Visual Studio 2010
答案 0 :(得分:4)
如果我理解正确,您有两个.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"];
但是,我建议不要过度使用会话来在页面之间传递信息。
答案 1 :(得分:1)
快速&amp; “Dirty”:一个会话变量,用于保存要传递的信息。
在第一页:
Session["ValueToPassToOtherControl"] = "The value";
在第二页:
var value = Session["ValueToPassToOtherControl"];
优雅:您需要以任何方式管理您的状态(通过静态管理器,其功能是存储和检索该信息,但这也是变量)。问题是HTTP is stateless。因此,您需要通过某种存储和检索数据来绕过此限制。
您建议使用ViewState但是忘了它,ViewState是ASP.NET网页用来跨回发持久更改Web表单状态的技术,这不是您的方案中发生的情况
答案 2 :(得分:1)
使用QueryString jugglery和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");
在第二页中根据需要使用这些。