五实现跨网页提交
这部分将讨论一下如何在ASPNET中实现跨网页提交为了开始我们的学习假设有两个Web页一个是源Web页另一个是目标Web页在源网页中初始化了使用按钮进行的跨网页提交操作我们首先必须设置目标网页按钮的PostBackUrl属性顺便说一句所有实现了SystemWebUIWebControlsIbuttonControl接口的Web控件都有跨网页提交的特性下面的代码将演示这一过程
<asp:Button ID=btnSubmit runat=server
PostBackUrl=~/targetaspx text = Post to a target page/>
当我们设置PostBackUrl属性时ASPNET框架将相应的控件绑定到一个新的叫WebForm_DoPostBackWithOptions的JavaScript函数产生的Html代码如下
<input type=
submit
name=
btnSubmit
value=
Post to target Page
onclick=javascript:WebForm_DoPostBackWithOptions(
new WebForm_PostBackOptions(btnSubmit false
Targetaspx false false)) id=btnSubmit />
对于上面的html代码来说当用户单击按钮时浏览器将提交目标URL(Targetaspx)而不是源URL
六从目标页面中获得源页面控件的值
ASPNET提供了一个叫PreviousPage的新的属性这个属性无论在何时当前页面进行跨网页提交操作时都会指向源页面要注意的是当源页面和目标页面在不同的应用程序中时这个属性包含null(这个null并不是未初始化的意思)还有要注意的是当目标网页访问PreviousPage属性时可以获得源页面的数据ASPNET运行时装载并执行了源页面这将引发ProcessChildRequest事件的发生而且它还会引发Page_Init事件Page_Load和任何其他的源页面按钮单击事件
因此我们要避免由于不小心进行误操作所以最好通过IsCrossPostBack属性来确认是否为一个跨网页提交发生如果这个属性值为true那么目标网页就是通过一个跨网页提交动作而调用的如果是通过另外一种方式调用的(如一般的请求ResponseRedirect或是一个ServerTransfer)这个属性的值为false下面的例子演示了如何使用这个属性
if ( PreviousPageIsCrossPagePostBack)
{
//执行代码
}
这个PreviousPage属性在ServerTransfer和跨网页提交中都可以使用在ASPNET中我们可以在调用ServerTransfer操作后使用PreviousPage属性在目标页面中来获得源页面的数据代码如下:
protected void Redirect_Click(object sender EventArgs e)
{
ServerTransfer(menuaspx);
}
在这个接收面中我们现在可以获得Web页面的数据代码如下
protected void Page_Load(object sender
EventArgs e)
{
if (PreviousPage != null)
{
TextBox txtBox = (TextBox)
PreviousPageFindControl(txtUserName);
if (textBox != null)
string userName = textBoxText;
//其他可执行的代码
}
}
要注意的是上面的代码必须将txtUserName控件转换为TextBox类型以便可以访问其中的值
[] [] []