如何从其他页面获取数据

时间:2015-04-27 07:29:28

标签: c# asp.net webforms

该功能存在于pageB.aspx中,参数从pageA传递。我没有得到pageB的结果。这里应该做些什么。

pageA.aspx.cs:

string URI = Server.MapPath("~/pageB.aspx");
NameValueCollection UrlParams = new NameValueCollection();
UrlParams.Add("section", "10");
UrlParams.Add("position", "20");
using (WebClient client = new WebClient())
  {
    byte[] responsebytes = client.UploadValues(URI, "POST", UrlParams);
    string responsebody = Encoding.UTF8.GetString(responsebytes);
  }

当编译器读取byte []时,会出现一个对话框,询问是否应对pageB进行更改。单击否,没有任何反应。字符串'响应体'是空的。

pageB.aspx.cs ::

protected void Page_Load(object sender, EventArgs e)
    {
      if (int.TryParse(Request.QueryString["section"], out section)
                && int.TryParse(Request.QueryString["position"], out position))
            {
                ProcessData();
            }
    }
private string ProcessData()
    {
        string HTMLContent = string.Empty;
        try
        {
            //some code to render the string.                
            return HTMLContent;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

我想获得HTMLContent'来自pageB

3 个答案:

答案 0 :(得分:2)

如果要在不同页面之间传递任何类型的数据,请尝试使用Session

编辑:

由于Session不适用于您的情况,您还可以尝试使用WebCache实例来存储信息并通过其他页面访问它。

此链接可能对此有所帮助:MSDN : WebCache

希望这有帮助。

答案 1 :(得分:2)

通过网页请求将pageA'加载'PageB可能不是世界上最好的主意。

我的理由是,我已经看到它在各种项目上完成,您可以通过路由请求和权限遇到各种各样的问题。

基本上,PageA-> PageB请求将被视为新用户加载PageB,cookie,会话变量等将被丢失,除非您明确填充它们。防火墙规则,路由,负载均衡等将以奇怪的方式起作用。

任何这些问题都可能导致PageA

的意外行为

相反:将功能从pageB移出到服务对象中,并从需要的地方直接调用它。

但是:出于某种原因,您需要通过网络请求进行此操作。也许它并不总是在同一台服务器上。

从您的示例代码看起来就像您将PageB视为Web服务一样。您传入参数并使用整个响应。因此,如果需要公开底层代码,我们可以将其称为ServiceB作为WebServiceB,然后通过Web请求从PageA引用它。

这将被“允许”,因为作为WebSerivce封装数据显然,PageB不是页面本身,不应该依赖于未明确传入的会话,cookie等变量。

更多的调用代码'知道'web服务可能在世界上的任何机器上,因此除非明确传递,否则不会期望它知道事情。

如果您确实将PageB更改为服务,并且您仍需要一个返回HTML的独立页面B.只需创建一个在后台调用ServiceB的新PageB。这允许您将“视图”逻辑与服务提供的数据/逻辑分开

答案 2 :(得分:2)

使用HttpContext.Current.Request [" Key"]而不是Request.QueryString [" Key"]。

if (int.TryParse(HttpContext.Current.Request["section"], out section)
            && int.TryParse(HttpContext.Current.Request["position"], out position))
{
     ProcessData();
}