3

いくつかのロジックを実行するためにポストバックする必要がある LinkBut​​ton があります。

終了したら、ブラウザにページをロードする代わりに、そのままにして新しいウィンドウを開きたいと思います。

これまでのところ、LinkBut​​ton を UpdatePanel に配置し、リロード時に JavaScript をレンダリングするのが最善のアイデアですが、それは完全にハックだと思います。また、私の記憶が正しければ、更新パネル内の JavaScript はとにかく実行されません。

他のアイデアはありますか?

4

3 に答える 3

6

LinkBut​​ton.PostBackUrl を使用して別のページを POST に設定し、いくつかのクライアント スクリプトを使用して新しいウィンドウを取得します (そして、将来のポストバックが正常に機能するように古いターゲットが復元されます)。2 ページ目は、PreviousPage を使用して、元のページから必要な状態にアクセスできます。

<script runat="server">
   void lnk_Click(object sender, EventArgs e) {
      // Do work
   }
</script>

<script type="text/javascript">
   var oldTarget, oldAction;
   function newWindowClick(target) {
      var form = document.forms[0];
      oldTarget = form.target;
      oldAction = form.action;
      form.target = target;

      window.setTimeout(
         "document.forms[0].target=oldTarget;"
         + "document.forms[0].action=oldAction;", 
         200
      );
   }
</script>

<asp:LinkButton runat="server" PostBackUrl="Details.aspx" Text="Click Me"
  OnClick="lnk_Click"
  OnClientClick="newWindowClick('details');" />
于 2008-11-21T21:56:51.223 に答える
2

コードは次のとおりです。

protected void Button1_Click(object sender, EventArgs e)

{

// Do some server side work

string script = "window.open('http://www.yahoo.com','Yahoo')";

if (!ClientScript.IsClientScriptBlockRegistered("NewWindow"))

{

ClientScript.RegisterClientScriptBlock(this.GetType(),"NewWindow",script, true);

}

}
于 2008-11-21T21:22:50.840 に答える
1

あなたが試すことができることの1つは、LinkBut​​ton OnClick イベントに処理を行わせ、Page.ClientScript.RegisterStartupScript をポップアップ コードに登録することです。処理が完了すると、新しいウィンドウが起動します。

編集: コメントを読んで、このアプローチを引き続き使用し、結果をセッション変数に保存してから、ポップアップ ページにそこから結果を取得させることができると思います。

于 2008-11-21T20:00:24.093 に答える