c#抓取网页数据(源页页面源码如下:目标页中获取源页窗体数据(组图))

优采云 发布时间: 2021-09-27 21:21

  c#抓取网页数据(源页页面源码如下:目标页中获取源页窗体数据(组图))

  在源代码页面中,此示例代码为用户提供了用于输入用户名、生日和年龄的文本框,并将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

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线