2009-07-23 3 views
3

Скажите в моей «Page_init()» «a.aspx», что я просто «server.transferrequest (« b.aspx »).Server.Transferrequest() и получение текущего URL-адреса

Это прекрасно работает, отображает содержимое для «b.aspx», и браузеру все равно остается «a.aspx».

Счастливые дни.

Однако кто-нибудь знает, как увидеть этот URL из моего «b.aspx» (результирующая страница) ?.

Обычный запрос.rawurl и request.url.absoluteuri возвращают текущую страницу как «b.aspx».

+0

Сэр, вы решили свою задачу? Потому что я столкнулся с такой же проблемой ... – Denis

ответ

2

Server.TransferRequest выполняет асинхронное выполнение указанного URL-адреса. Это означает, что ваш клиент не имеет никакого представления о том, что происходит на сервере, поэтому с точки зрения вашего клиента это одна и та же страница.

Если вам нужно изменить фактическую страницу (которая является наиболее распространенной), используйте Response.Redirect.

+0

Мне нужно, чтобы исходный url был тем же. – maxp

+0

Единственный вариант, который я вижу, это сохранить его как hiddenField. Прямого способа достижения этого нет. – Sergio

1

Возможно, до того, как вы сделаете передачу, вы можете сохранить необходимую информацию где-то, а затем получить ее, когда она понадобится снова.

+0

сохранение его в сеансе. не элегантный вообще. – maxp

+0

Вы можете сохранить его в коллекции 'HttpContext.Current.Items'. Он сохраняет свои позиции только во время трансферов. –

1

Вы можете использовать PreviousPage, чтобы получить исходный код страницы, что делает передачу сервера:

string previousPagesUrl = PreviousPage.Request.RawUrl; 

EDIT: @maxp, в качестве ответа на ваш комментарий, PreviousPage работает только для Server.Transfer и поперечного постбэк.

Вы получите нуль для PreviousPage если:

  • исходная страница перенаправляет на страницу назначения.
  • ссылка на исходной странице пересылает страницу на страницу назначения.
+0

сложно, если предыдущая страница не является той, которая выполняла server.transferrequest, то есть страницы c.aspx запросы b.aspx – maxp

0

Вы пробовали этот метод:

public void Transfer(string path, bool preserveForm) 

http://msdn.microsoft.com/en-us/library/caxa892w.aspx

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

0
NameValueCollection headers = new NameValueCollection(); 
headers["RawUrl"] = HttpContext.Current.Request.RawUrl; 
Server.TransferRequest("b.aspx", true, null, headers); 

И затем использовать Headers["RawUrl"] в b.aspx.