1

Web アプリケーションでユーザーのディスパッチ センターのようなものにしたいメイン ページがあります。したがって、メイン ページを開いたままにしたいのですが、ユーザーが特定のタスクを選択すると、選択したタスクで新しいタブまたはページが作成されるように設定できます。

コントロールを別のページに転送する方法は知っていますが、Server.Transfer のようなことを行うにはどうすればよいですか?その新しいページを新しいタブに表示し、既存のページを古いタブ/ウィンドウで開いたままにしますか?

私がやっていることの例を挙げます。現在、メイン ページに LinkBut​​ton のリストを作成するリピーターがあります。LinkBut​​tons には、データ ソースからのテキストがあります。ユーザーがリンク ボタンをクリックしたら、新しいページを開きたいので、この新しいページでセッション状態を保持したいと考えています。

これはどのように行うことができますか?

.NET 3.5 で ASP.NET のバージョンを使用しています。

編集:タブかウィンドウかは気にしません。新しい Web ページを生成し、既存の Web ページを開いたままにしたいだけです。

4

4 に答える 4

3

UI の動作をサーバー側で変更することはできません (たとえば、Server.Transfer または Response.Redirect を使用して) - そのようには機能しません。したがって、これについては次の 2 つの方法があります。

  1. 新しいウィンドウ/タブを開く必要がある特定のタスクが事前にわかっている場合は、アンカーまたはフォーム タグのターゲットを適切に設定します (または、javascript の window.open() 関数を使用します)。
  2. 新しいウィンドウ/タブを開く決定をサーバー側で行う必要がある場合は、必要なことを行う JavaScript を生成して返すことができます。

新しいタブ/ウィンドウの動作はブラウザとユーザーの設定に完全に依存するため、どちらが発生するかを保証する方法はないことに注意してください。一部の設定では、ターゲットまたはユーザーに関係なく、すべてのリンクを同じウィンドウで強制的に開くことさえできます。 window.open() を呼び出します。

デフォルトの機能である Cookie ベースのセッションを使用している場合、ユーザーは新しいウィンドウまたはタブでも同じセッションを使用しているため、セッション状態を保持するために特別なことを行う必要はありません。

URL ベース (または Cookie なし) のセッション キーを使用している場合は、JavaScript で新しいウィンドウを開くときに、キーを使用して URL を適切にフォーマットする必要があります。私は肯定的ではありませんが、target 属性と相対 URL を使用すると、適切な URL が自動的に生成されるはずだと単純に信じています。

于 2009-01-28T16:40:40.660 に答える
1

これが私がしたことです。

彼らが行った選択に基づいてセッション状態変数を追加する必要がありました.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()">
于 2009-01-28T18:56:45.630 に答える
0

私はこれが不可能であるとほぼ確信しています。ほとんどのタブ付きブラウザには、新しいページを起動する場所 (新しいウィンドウまたは新しいタブ) をブラウザに指示する微調整可能な設定があります。

これがユーザーの制御下にあるという事実を考えると、ブラウザに依存しない方法でこれを実現する方法は現在のところないと思います。IE の DOM 拡張によって公開されたオブジェクト モデルでそれが可能になるとしても、私は驚かないでしょう。

于 2009-01-28T16:30:44.300 に答える
0

新しいページがタブで開いているか、新しいページがコードからではなくブラウザのユーザー設定によって制御されているかは、可能ではありません。

于 2009-01-28T16:34:43.903 に答える