Создайте новую вкладку или окно для веб-страницы из ASP.NET - PullRequest
1 голос
/ 28 января 2009

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

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

Чтобы привести пример того, что я делаю. В настоящее время у меня есть повторитель на главной странице, который создает список кнопок LinkButton. Кнопки LinkButtons содержат текст из источника данных. Когда пользователь нажимает на кнопку ссылки, я хочу открыть новую страницу и хочу, чтобы состояние сеанса сохранялось с этой новой страницей.

Можно ли это сделать и как?

Я использую версию ASP.NET в .NET 3.5.

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

Ответы [ 4 ]

3 голосов
/ 28 января 2009

Вы не можете изменить поведение пользовательского интерфейса на стороне сервера (например, с помощью Server.Transfer или Response.Redirect) - это просто не работает таким образом. Итак, есть два способа сделать это:

  1. Если вы заранее знаете, какие конкретные задачи требуют открытия нового окна / вкладки, установите цель привязки или тегов формы соответствующим образом (или используйте функцию window.open () javascript).
  2. Если решение об открытии нового окна / вкладки должно быть принято на стороне сервера, вы можете сгенерировать и вернуть javascript, который делает то, что вам нужно.

Имейте в виду, что поведение новой вкладки / окна полностью зависит от браузера и настроек пользователя, поэтому невозможно гарантировать, что произойдет - некоторые настройки могут даже заставить все ссылки открываться в одном окне, независимо от целевой или вызывающий window.open ().

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

Если вы используете сеансовый ключ на основе URL-адреса (или без cookie-файла), вам необходимо убедиться, что вы соответствующим образом отформатировали URL-адрес, используя ключ при открытии новых окон с помощью JavaScript. Я не уверен, но я просто считаю, что использование атрибута target и относительных URL должно автоматически генерировать соответствующий URL.

1 голос
/ 28 января 2009

Это то, что я сделал.

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

На странице отправки я просто использую Server.Transfer для перехода на новую страницу (после добавления состояния сеанса), однако на новой странице я запускаю скрипт загрузки. Вот мой код:

В обработчике событий команды элемента для страницы отправки:

protected void RecentButtonsRepeater_ItemCommand(object source,
    RepeaterCommandEventArgs e)
{
    string code = ((LinkButton)e.Item.Controls[1]).Text;
    string sql = "SELECT RunID FROM ProductionRuns WHERE RunCode = @code";
    SqlConnection sqlconn = new SqlConnection(QCDataPath);
    sqlconn.Open();
    SqlCommand sqlcomm = new SqlCommand(sql, sqlconn);
    sqlcomm.Parameters.AddWithValue("@code", code);
    SqlDataReader sdr = sqlcomm.ExecuteReader();

    sdr.Read();

    int id = sdr.GetInt32(0);

    sdr.Close();
    sqlconn.Close();

    Session["RunID"] = id;
    Server.Transfer("Sheet.aspx");
}

А в разметке Sheet.aspx:

<script type="text/javascript">
    function ReOpenScoreHome() {
        window.open("Scoresheets.aspx", "reopenwindow");
    }
</script>
</head>
<body onload="ReOpenScoreHome()">
0 голосов
/ 28 января 2009

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

0 голосов
/ 28 января 2009

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

Учитывая тот факт, что это находится под контролем пользователя, я не думаю, что в настоящее время есть способ добиться того, чтобы это происходило независимо от браузера. Хотя я не удивлюсь, если объектная модель, предоставляемая расширениями DOM в IE, позволяет вам это делать.

...