2015-04-27 2 views
1

Функциональность существует в pageB.aspx и параметры передаются со страницыA. Я не получаю результат страницы. Что нужно делать здесь.Как получить данные с другой страницы

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

когда компилятор считывает байт [], есть диалог, который спрашивает, если изменения должны быть сделаны, чтобы страницаБ. При нажатии «Нет» ничего не происходит. Строка «тело ответа» пуста.

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' от страницаБа

ответ

2

Попробуйте использовать Session, если вы хотите передать любой тип данных между различными страницами.

EDIT:

Поскольку Session обыкновение работать в вашем случае, вы также можете попробовать использовать WebCache экземпляр для хранения информации и доступ к нему через другие страницы.

Эта ссылка может помочь здесь: MSDN : WebCache

Надеется, что это помогает.

+0

не может использовать переменные сеанса для этого проекта. – Qwerty

+1

"не может использовать переменные сеанса для этого проекта." Почему нет? – lahsrah

+2

Несколько серверов, на которых размещена одна и та же страница. Поэтому посоветовали не делать этого. – Qwerty

2

Наличие страницы «Загрузка» PageB через веб-запрос, вероятно, не самая лучшая идея в мире.

Мое рассуждение заключается в том, что я видел это в разных проектах, и вы можете столкнуться с множеством проблем с маршрутизацией запроса и разрешений.

По существу запрос PageA-> PageBB будет обрабатываться как новый пользователь, загружающий страницу B, файлы cookie, переменные сеанса и т. Д., Будет потерян, если вы явно не заполнили их. правила брандмауэра, маршрутизация, балансировка нагрузки и т. д. будут действовать нечетно.

Любые из этих проблем может привести к тому неожиданному поведению страницаА

Вместо этого: Переместить функциональность из страницаБа в сервисном объект и вызвать его непосредственно от того, где это необходимо.

Однако: Скажите почему-то, что вам необходимо сделать это через веб-запрос. Возможно, это не всегда на том же сервере или что-то в этом роде.

Он выглядит так, как вы рассматриваете PageB как веб-сервис. Вы передаете параметры и используете весь ответ. Таким образом, вы можете, если требуется, выставить код поддонов, позвоните в ServiceB как WebServiceB, а затем обратитесь к нему через страницу PageA через веб-запрос.

Это будет «разрешено», поскольку инкапсуляция данных в виде WebSerivce делает очевидным, что PageB не является самой страницей и не должен полагаться на такие переменные, как сеанс, файлы cookie и т. Д., Которые явно не переданы.

Далее код вызова «знает», что вебсервис может находиться на любой машине в мире и, следовательно, не будет ожидать, что он узнает о вещах, если они явно не переданы.

Если вы изменили PageB на службу, и вам все еще нужен автономный файл PageB, который возвращает HTML. Просто создайте новый PageB, который вызывает ServiceB за кулисами. Это позволяет отделить логику «вид» от данных/логики, предоставляемых службой.

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(); 
} 
Смежные вопросы