web-dev-qa-db-ja.com

Response。新しいウィンドウにリダイレクト

Response.Redirect("MyPage.aspx")を実行したいのですが、新しいブラウザウィンドウで開いてください。 JavaScript登録スクリプトメソッドを使用せずにこれを実行したことがあります。覚えていないの?

116
Fouad

私はちょうど答えを見つけました、それは動作します:)

サーバー側のリンク/ボタンに次を追加する必要があります。

OnClientClick="aspnetForm.target ='_blank';"

ボタンのコード全体は次のようになります。

<asp:LinkButton ID="myButton" runat="server" Text="Click Me!" 
                OnClick="myButton_Click" 
                OnClientClick="aspnetForm.target ='_blank';"/>

サーバー側のOnClickでResponse.Redirect("MyPage.aspx");を実行すると、ページが新しいウィンドウで開かれます。

追加する必要がある他の部分は、フォームのターゲットを修正することです。そうしないと、すべてのリンクが新しいウィンドウで開きます。これを行うには、POPUPウィンドウのヘッダーに次を追加します。

<script type="text/javascript">
    function fixform() {
        if (opener.document.getElementById("aspnetForm").target != "_blank") return;
        opener.document.getElementById("aspnetForm").target = "";
        opener.document.getElementById("aspnetForm").action = opener.location.href;
    }
</script>

そして

<body onload="fixform()">
112
Fouad

これを拡張メソッドとして使用できます

public static class ResponseHelper
{ 
    public static void Redirect(this HttpResponse response, string url, string target, string windowFeatures) 
    { 

        if ((String.IsNullOrEmpty(target) || target.Equals("_self", StringComparison.OrdinalIgnoreCase)) && String.IsNullOrEmpty(windowFeatures)) 
        { 
            response.Redirect(url); 
        } 
        else 
        { 
            Page page = (Page)HttpContext.Current.Handler; 

            if (page == null) 
            { 
                throw new InvalidOperationException("Cannot redirect to new window outside Page context."); 
            } 
            url = page.ResolveClientUrl(url); 

            string script; 
            if (!String.IsNullOrEmpty(windowFeatures)) 
            { 
                script = @"window.open(""{0}"", ""{1}"", ""{2}"");"; 
            } 
            else 
            { 
                script = @"window.open(""{0}"", ""{1}"");"; 
            }
            script = String.Format(script, url, target, windowFeatures); 
            ScriptManager.RegisterStartupScript(page, typeof(Page), "Redirect", script, true); 
        } 
    }
}

これにより、実際のResponseオブジェクトでNiceオーバーライドを取得

Response.Redirect(redirectURL, "_blank", "menubar=0,scrollbars=1,width=780,height=900,top=10");
60
Sasa Tancev

Response.Redirectはサーバー上で開始されるため、それを使用してそれを行うことはできません。

Responseストリームに直接書き込むことができる場合、次のようなものを試すことができます。

response.write("<script>");
response.write("window.open('page.html','_blank')");
response.write("</script>");
26
JamesSugrue

クリックイベントハンドラを介してURLを構築します。

string strUrl = "/some/url/path" + myvar;

次に:

ScriptManager.RegisterStartupScript(Page, Page.GetType(), "popup", "window.open('" + strUrl + "','_blank')", true);
25
steve

修正フォームのトリックはきれいですが、次のとおりです。

  1. 新しいウィンドウにロードするもののコードにアクセスできない場合があります。

  2. あなたがそうしても、あなたはそれが常にロードされるという事実に依存しており、エラーがありません。

  3. そして、他のページがfixformをロードして実行する機会を得る前に、ユーザーが別のボタンをクリックしないという事実に依存しています。

代わりにこれを行うことをお勧めします:

OnClientClick="aspnetForm.target ='_blank';setTimeout('fixform()', 500);"

同じページでfixformを設定します。次のようになります。

function fixform() {
   document.getElementById("aspnetForm").target = '';
}
13
tom

この方法のようなコードビハインドでも使用できます

ClientScript.RegisterStartupScript(this.Page.GetType(), "",
  "window.open('page.aspx','Graph','height=400,width=500');", true);
11
shalu

popupメソッドは、訪問者に安全な質問をします。

ここに私の簡単な解決策があります。

<script type="text/javascript">
    function targetMeBlank() {
        document.forms[0].target = "_blank";
    }
</script>

<asp:linkbutton  runat="server" ID="lnkbtn1" Text="target me to blank dude" OnClick="lnkbtn1_Click" OnClientClick="targetMeBlank();"/>
8
Kursat Turkay

これはResponse.Redirectでは不可能です。サーバー側で発生し、ブラウザーにそのアクションを実行するように指示できないためです。最初のウィンドウには何が残りますか?空白のページですか?

8
John Sheehan
<asp:Button ID="btnNewEntry" runat="Server" CssClass="button" Text="New Entry"

OnClick="btnNewEntry_Click" OnClientClick="aspnetForm.target ='_blank';"/>

protected void btnNewEntry_Click(object sender, EventArgs e)
{
    Response.Redirect("New.aspx");
}

ソース: http://dotnetchris.wordpress.com/2008/11/04/c-aspnet-responseredirect-open-into-new-window/

6
dpp

次のコードを使用して、新しいタブで新しいページを開くこともできます。

<asp:Button ID="Button1" runat="server" Text="Go" 
  OnClientClick="window.open('yourPage.aspx');return false;" 
  onclick="Button3_Click" />

そして、Response.Redirect( "yourPage.aspx");を呼び出すだけです。ボタンイベントの背後。

4
Zohaib

ポストバックする必要がないようにコードを再構築できる場合、ボタンのPreRenderイベントでこのコードを使用できます。

protected void MyButton_OnPreRender(object sender, EventArgs e)
{
    string URL = "~/MyPage.aspx";
    URL = Page.ResolveClientUrl(URL);
    MyButton.OnClientClick = "window.open('" + URL + "'); return false;";
}
4
humbads

私はいつもこのコードを使用しています... このコードを使用

String clientScriptName = "ButtonClickScript";
Type clientScriptType = this.GetType ();

// Get a ClientScriptManager reference from the Page class.
ClientScriptManager clientScript = Page.ClientScript;

// Check to see if the client script is already registered.
if (!clientScript.IsClientScriptBlockRegistered (clientScriptType, clientScriptName))
    {
     StringBuilder sb = new StringBuilder ();
     sb.Append ("<script type='text/javascript'>");
     sb.Append ("window.open(' " + url + "')"); //URL = where you want to redirect.
     sb.Append ("</script>");
     clientScript.RegisterClientScriptBlock (clientScriptType, clientScriptName, sb.ToString ());
     }

LinkBut​​tonの代わりにHyperlinkを使用しましたが、うまく機能しました。Targetプロパティがあるため、問題が解決しました。 Response.Writeには解決策がありましたが、それは私のレイアウトを台無しにしており、更新または戻るたびにScriptManagerにあるものがウィンドウを再度開いていました。だからこれは私がそれを解決した方法です:

<asp:HyperLink CssClass="hlk11" ID="hlkLink" runat="server" Text='<%# Eval("LinkText") %>' Visible='<%# !(bool)Eval("IsDocument") %>' Target="_blank" NavigateUrl='<%# Eval("WebAddress") %>'></asp:HyperLink>
1
bokkie

上記の@takrlと@tomの回答に基づいたjQueryバージョンを次に示します。注:ハードコードされたformid(上記のaspnetFormという名前)はなく、Firefoxで問題が発生する可能性のある直接のform.target参照も使用しません。

<asp:Button ID="btnSubmit" OnClientClick="openNewWin();"  Text="Submit" OnClick="btn_OnClick" runat="server"/>

次に、同じページで参照されるjsファイルで:

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

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

asp.netコードビハインドから新しいウィンドウを開く ここでやったようにajaxを使用する http://alexandershapovalov.com/open-new-window-from-code-behind-in- aspnet-68 /

protected void Page_Load(object sender, EventArgs e)
{
    Calendar1.SelectionChanged += CalendarSelectionChanged;
}

private void CalendarSelectionChanged(object sender, EventArgs e)
{
    DateTime selectedDate = ((Calendar) sender).SelectedDate;
    string url = "HistoryRates.aspx?date="
+ HttpUtility.UrlEncode(selectedDate.ToShortDateString());
    ScriptManager.RegisterClientScriptBlock(this, GetType(),
"rates" + selectedDate, "openWindow('" + url + "');", true);
}
0
Alex Shapovalov

以前の例はどれも役に立たなかったため、ソリューションを投稿することにしました。ボタンクリックイベントに、コードビハインドがあります。

Dim URL As String = "http://www.google/?Search=" + txtExample.Text.ToString
URL = Page.ResolveClientUrl(URL)
btnSearch.OnClientClick = "window.open('" + URL + "'); return false;"

他の誰かのresponse.redirectコードを変更して、新しいブラウザで開く必要がありました。

0
crh225

HTML

<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" OnClientClick = "SetTarget();" />

Javascript:

function SetTarget() {
 document.forms[0].target = "_blank";}

ANDコードビハインド:

Response.Redirect(URL); 
0
Tran Anh Hien

私はこのアプローチを使用しました。ポップアップで何もする必要はありません(PDFファイルにリダイレクトしていたため、アクセスできませんでした)。クラスも使用します。

$(function () {
    //--- setup click event for elements that use a response.redirect in code behind but should open in a new window
    $(".new-window").on("click", function () {

        //--- change the form's target
        $("#aspnetForm").prop("target", "_blank");

        //--- change the target back after the window has opened
        setTimeout(function () {
            $("#aspnetForm").prop("target", "");
        }, 1);
    });
});

使用するには、クラスに「new-window」クラスを要素に追加します。 bodyタグに何も追加する必要はありません。この関数は、新しいウィンドウをセットアップし、同じ関数で修正します。

0
Ricketts

リンクボタンにtarget = "_ blank"を入れることでこれを行いました

<asp:LinkButton ID="btn" runat="server" CausesValidation="false"  Text="Print" Visible="false" target="_blank"  />

次に、コードビハインドページロードでhref属性を設定します。

btn.Attributes("href") = String.Format(ResolveUrl("~/") + "test/TestForm.aspx?formId={0}", formId)
0
Hevski

Page.RegisterStartupScriptを使用して、ページの読み込み時にjavascriptが起動するようにすることができます。

0
CodeRot