【IT168技术文档】
ASP.NET 2.0中引入了一个新的方法:跨页面提交,即postback触发在另一个页面。这种技术听起来很是简单,但却存在隐患。一不小心,就会导致你创建的页面紧密耦合,难以维护和调试。
支持跨页面提交的机制是一个名为PostBackUrl的属性,该属性由IButtonControl接口定义,实现这个接口的按钮控件包括 ImageButton,LinkButton,Button。将PostBackUrl属性值设置为另一个web窗体的名称(即URL),当用户点击按钮时,页面将被提交到新的URL。
看下面这个示例,该示例包括源页面CrossPage1.aspx和目标页面CrossPage2.aspx:
CrossPage1.aspx
从源页面中获取更多数据<html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Source Page</title> </head> <body> <form id="form1" runat="server"> <div> FirstName: <asp:TextBox runat="server" ID="txtFirstName"></asp:TextBox> <br /> LastName: <asp:TextBox runat="server" ID="txtLastName"></asp:TextBox> <br /> <asp:Button runat="server" ID="cmdSubmit" PostBackUrl="~/CrossPage2.aspx" Text="Cross-Page Postback" /> </div> </form> </body> </html>
上面那个示例作了一个有趣的尝试,但仅仅如此,我们还是不能传递任何有用的信息。
要获取源页面中控件的值,可以使用FindControl方法:
if (PreviousPage != null) { lblInfo.Text = "You came from a page title " + PreviousPage.Header.Title; string firstName = (PreviousPage.FindControl("txtFirstName") as TextBox).Text; string lastName = (PreviousPage.FindControl("txtLastName") as TextBox).Text; lblInfo.Text += "<br />"; lblInfo.Text += "your full name: " + firstName + " " + lastName; } 要获得更多信息,我们需要将PreviousPage引用转换为适当的页面类(本示例中是CrossPage1类): if (PreviousPage != null) { CrossPage1 prevPage = PreviousPage as CrossPage1; if (prevPage != null) { // 此时可以访问源页面的公共属性 } }