IE и Firefox различное поведение обратной передачи после Server.Transfer - PullRequest
1 голос
/ 06 октября 2009

У меня есть 2 страницы aspx, в событии обратной передачи со страницы 1 я добавляю данные в текущий контекст, затем выполняю server.transfer на страницу 2. Все это работает, как и ожидалось, однако из-за server.transfer, адресная строка по-прежнему показывает URL-адрес страницы 1.

странность наступает, когда я нажимаю кнопку на странице 2.

в IE (7 или 8), когда я нажимаю кнопку на странице 2, страница отправляется на страницу 2, как и ожидалось.

в Firefox, когда я нажимаю кнопку на странице 2, страница переходит на страницу 1.

Кто-нибудь еще испытывал это? Я делаю что-то неправильно? Есть ли обходной путь?

это, по сути, код на странице 1

Context.Items["x"] = x.Checked;
Context.Items["y"] = y.Checked;
Context.Items["z"] = z.Checked;
Server.Transfer( "page2.aspx", false );

Ответы [ 3 ]

2 голосов
/ 06 октября 2009

Вместо этого есть постбэк кросс-страницы?

MSDN: межстраничное размещение в ASP.NET

1 голос
/ 06 октября 2009

Если вы не используете PreviousPage, вы можете использовать Response.Redirect("~/Page2.aspx"); вместо этого. Это сообщит браузеру пользователя об изменении страницы.

В качестве альтернативы, если вы используете PreviousPage, используйте пост-кросс-пост обратно, установив атрибут PostBackUrl для нужного Button. Это позволит правильно обрабатывать вашу логику Server.Transfer. Чтобы получить доступ к значению CheckBox, вам нужно сделать открытые свойства на странице 1, которые будут доступны через PreviousPage.

Таким образом, Page1 будет содержать эти свойства в коде:

public bool xChecked { get x.Checked; }
public bool yChecked { get y.Checked; }
public bool zChecked { get z.Checked; }

Page2 будет использовать PreviousPage:

protected void Page_Load()
{
    if(PreviousPage != null && PreviousPage is Page1)
    {
        if(((Page1)PreviousPage).xChecked)
        {
            //use xChecked like this
        }
    }
}
1 голос
/ 06 октября 2009

Вы можете попытаться установить form.action для конкретной страницы, на которую вы хотите опубликовать.

Событие загрузки формы страницы 2:

Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Me.Form.Action = "page2.aspx"
End Sub

Это должно гарантировать размещение на правильной странице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...