2015-04-27 138 views
1

该功能存在于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); 
    } 

当编译器读取字节[],存在其中询问是否应当改变到页面B制成的对话框。点击否,没有任何反应。字符串'responsebody'是空的。

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; 
     } 
    } 

我想从页面B

回答

2

得到 'HTMLContent' 尝试使用Session,如果你想通过任何类型的不同页面之间的数据。

编辑:

由于Session你的情况不会是工作,你也可以尝试使用WebCache实例来存储信息,并在其他网页访问它。

此链接可能有助于在这里:​​MSDN : WebCache

希望这有助于。

+0

无法为此项目使用会话变量。 “ – Qwerty

+1

”无法为此项目使用会话变量。“为什么不? – lahsrah

+2

承载相同页面的多台服务器。因此建议不要全部通过。 – Qwerty

2

拥有pageA通过web请求“加载”PageB可能不是世界上最好的想法。

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

实质上,PageA-> PageB请求将被视为加载PageB的新用户,cookies,会话变量等将会丢失,除非您明确填充它们。防火墙规则,路由,负载平衡等将采取奇怪的方式。

所有的这些问题可能会导致您的网页A

的意外行为

相反:将功能从页面B的为服务对象,并直接在需要的地方调用它。

但是:说出于某种原因,您需要通过网络请求来完成。也许它不总是在同一台服务器上或其他东西上。

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

这将被'允许'作为WebSerivce的数据封装使WebB不是它自身的页面,并且不应该依赖变量,例如会话,cookie等等,这些变量不会明确地传入。

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

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

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(); 
}