2012-04-04 5 views
3

これは長いタイトルなので、ここで私は何をしているのですか? URLは、私がレポート表示するには、コードビハインドでボタンのクリックハンドラでこれをやっている:htmlをonload = document.form.submit()でHttpContext.Current.Responseに書き込んだ後に2回戻ることを避ける

System.Web.HttpContext.Current.Response.Clear(); 
System.Web.HttpContext.Current.Response.Write("<html><head></head>");  
System.Web.HttpContext.Current.Response.Write("<body onload=\"document.mainform.submit(); \">"); 
System.Web.HttpContext.Current.Response.Write(string.Format(CultureInfo.InvariantCulture, "<form name=\"mainform\" method=\"post\" action=\"{0}\">", ReportURL)); 
foreach (string key in Params.Keys) 
{ 
    System.Web.HttpContext.Current.Response.Write(string.Format(CultureInfo.InvariantCulture, "<input name=\"{0}\" type=\"hidden\" value=\"{1}\">", key, Params[key])); 
} 
System.Web.HttpContext.Current.Response.Write("</form>"); 
System.Web.HttpContext.Current.Response.Write("</body></html>"); 

これは素晴らしい作品を、私はレポートから戻ったとき、私はページに取られてる私だけこれはonloadイベントのためにフォームをすぐに提出します。私はそれを過ぎて戻るために2回本当にすぐにヒットすることができますが、これは理想的ではありません。

私はJavaScriptを使って新しいウィンドウを開いてみましたが、HTMLを書き込む前にClientScript.RegisterStartupScriptを使っていましたが、新しいウィンドウのHttpContextを取得する方法がわかりません。

答えて

0

新しいウィンドウが開きました。私は二つの小さなジャバスクリプト関数を

function openNewWin() { 
    $('form').attr('target', '_blank'); 
    setTimeout('resetFormTarget()', 500); 
} 

function resetFormTarget() { 
    $('form').attr('target', ''); 
} 

を添加し、私は

OnClientClick="openNewWin();" 

を設定するLinkBut​​tonにクリック時には、まだサーバ側上記のコードを実行するが、応答は新しいウィンドウに書き込まれます。 openNewWin関数のsetTimeoutは、フォームのターゲットプロパティをリセットします。そのため、アプリケーションはそれに戻った後も正常に機能します。

0

コードを使用して問題を再現できませんでしたので、より多くのコンテキストが役立ちます。ページの残りの部分が構成されている方法に応じて、あなたが代わりにクリックハンドラのPostbackURLを使用することができる場合があります

<form id="form1" runat="server"> 
    <asp:HiddenField runat="server" ID="Key1" Value="Value1"/> 
    <asp:HiddenField runat="server" ID="Key2" Value="Value2"/> 
    <asp:Button runat="server" ID="button" 
     Text="ok" PostBackUrl="ReportURL.aspx"/> 
</form> 

ブラウザの履歴に余分/置き換えページを心配する必要はありません。この方法では、 。

+0

ありがとうございますが、レポートパラメータは一部のページコンテンツに基づいて動的に作成されるため、クリックハンドラが必要です。 –

+0

これを行うより直接的な方法があると思います。提出するフォームを書くことは、回避策のように思えます。多分あなたのコードをもっと投稿してください。 – mcknz

関連する問題