c#抓取网页数据(源页页面源码如下:目标页中获取源页窗体数据(组图))
优采云 发布时间: 2021-09-27 21:21c#抓取网页数据(源页页面源码如下:目标页中获取源页窗体数据(组图))
在源代码页面中,此示例代码为用户提供了用于输入用户名、生日和年龄的文本框,并将Button 控件的PostBackUrl 属性设置为DestinationPage.aspx。也就是说,当你点击【提交到目标页面】按钮时,源页面表单的数据就会被传送到目标页面.aspx页面。
在目标页面中,通过 Page.Request.Form 属性获取传递的数据。
源页面的页面源码如下:
源页!
User Name :
<br />
Birth Date :
<br />
Age :
<br />
在目标页面中获取源页面的表单数据的代码如下:
protected void Page_Load(object sender, EventArgs e)
{
StringBuilder SBuilder = new StringBuilder();
NameValueCollection PostedValues =
this.Request.Form;
for (int Index = 0; Index < PostedValues.Count; Index++)
{
if (PostedValues.Keys[Index].Substring(0, 2) != "__")
{
SBuilder.Append(string.Format("{0} = {1}",
PostedValues.Keys[Index],
PostedValues[Index]));
SBuilder.Append("<br />");
}
}
this.Response.Write(SBuilder.ToString());
}
代码中的if语句主要是为了避免获取以两个下划线__开头的隐藏字段的数据,例如__VIEWSTATE、__EVENTTARGET、__EVENTARGUMENT。当然,你也可以去掉这个if语句,然后就可以同时获取这些隐藏字段的数据了。
三、通过会话状态传递数据
使用会话状态的优点是数据可以在与源页面相同的 ASP.NET 应用程序中的所有网页之间共享。缺点是会增加服务器的内存开销。
在下面的代码中,用户在源页面的【用户名】文本框中输入自己的姓名,然后点击【提交数据】按钮。服务器代码会通过 Page.Session 属性将用户名存储在会话状态中,然后使用 Response.Redirect() 方法强制页面重定向到另一个页面(DestinationPage.aspx)。在此目标页面中,再次使用 Page.Session 属性来获取保存在源页面中的用户名。
源码页面的源码如下:
源页:通过会话状态传递数据!
用户名:
源页面中将用户名保存到会话状态并重定向到目标页面的代码如下:
protected void SubmitButton_Click(object sender, EventArgs e)
{
this.Session["UserName"] = this.UserNameTextBox.Text;
this.Response.Redirect("DestinationPage.aspx");
}
获取目标页面中会话状态中保存的用户名的代码如下:
protected void Page_Load(object sender, EventArgs e)
{
string UserName = this.Session["UserName"].ToString();
this.Response.Write(UserName);
}
四、通过源页面的公共属性传递数据
在示例代码中,我们提供了在源页面输入用户名的文本框,然后点击【提交到目标页面】按钮将数据提交到目标页面。
源码页面的源码如下:
源页:通过公共属性传递数据!
用户名:
<br />
并且为源页面定义了一个名为 UserName 的公共属性。该属性返回在[用户名] 文本框中输入的用户名。
public string UserName
{
get { return this.UserNameTextBox.Text; }
}
通过这种方式,我们创建了一个收录公共属性的源页面。然后创建目标页面并将@PreviousPageType 指令添加到目标页面。当然,您也可以使用@Reference 指令。
这样,ASP.NET 就会自动将目标页面的 Page.PreviousPage 属性转换为源页面的类型,以便您可以直接访问 UserName 属性。注意下面的代码,我们没有把Page.PreviousPage转换成显示类型。
if (this.PreviousPage != null)
{
string UserName = this.PreviousPage.UserName;
this.Response.Write(UserName);
}
需要特别强调的是,不要忘记判断Page.PreviousPage属性是否为null,因为它确实有为null的可能。如果在 null 的情况下获取了源页面 UserName 的公共属性,则会引发异常。
五、通过源页面中的控件值传递数据
最后一种传输数据的方式是直接获取源页面的控件对象,然后通过控件的属性值获取需要的数据。例如,在本示例代码中,我们获取源页面的TextBox控件,然后通过访问TextBox.Text属性获取用户在源页面中输入的数据。
在下面的示例代码中,我们在源页面放置了一个用于输入用户名的文本框,ID为UserNameTextBox。您可以通过 Page.PreviousPage.FindControl() 方法获取对此控件的引用。
源码页面的源码如下:
源页:通过控件属性传递数据!
用户名:
<br />
获取目标页面中的文本框控件并获取其Text属性值的代码如下:
if (this.PreviousPage != null)
{
TextBox UserNameTextBox =
(TextBox)this.PreviousPage.FindControl("UserNameTextBox");
if (UserNameTextBox != null)
{
this.Response.Write(UserNameTextBox.Text);
}
}
如果要获取的控件位于某个控件内部,例如以下代码,则 UserNameTextBox 控件位于名为 UserPanel 的 Panel 控件内部。然后先找出这个Panel控件,再通过这个控件的FindControl()方法找出里面的文本框控件。
源码页面的源码如下:
源页:通过控件属性传递数据!
用户名:
<br />
获取目标页面中Panel控件内的TextBox控件的代码如下:
if (this.PreviousPage != null)
{
Panel UserPanel = (Panel)this.PreviousPage.FindControl("UserPanel");
if (UserPanel != null)
{
TextBox UserNameTextBox =
(TextBox)UserPanel.FindControl("UserNameTextBoxInPanel");
if (UserNameTextBox != null)
{
this.Response.Write(UserNameTextBox.Text);
}
}
}
无论该控件位于该级别的命名容器控件内部,都是通过这种方式获取的。
不要忘记判断获取的控件引用是否为空。
至此,网页间数据传输的5种方式已经基本展示完毕!^_^
赤脚思考 2010-11-9