回答:
私はちょうど答えを見つけ、それはうまくいきます:)
サーバーサイドのリンク/ボタンに以下を追加する必要があります:
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");
と、ページが新しいウィンドウで開きます。
追加する必要があるもう1つの部分は、フォームのターゲットを修正することです。そうしないと、すべてのリンクが新しいウィンドウで開きます。これを行うには、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()">
OnClientClick="aspnetForm.target ='_blank';"
に使用する必要がありましたOnClientClick="document.getElementById('Form').target ='_blank';"
これを拡張メソッドとして使用できます
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オブジェクトを適切にオーバーライドできます
Response.Redirect(redirectURL, "_blank", "menubar=0,scrollbars=1,width=780,height=900,top=10");
Response.Redirectはサーバー上で開始されるため、それを使用して実行することはできません。
応答ストリームに直接書き込むことができる場合は、次のようなことを試すことができます。
response.write("<script>");
response.write("window.open('page.html','_blank')");
response.write("</script>");
クリックイベントハンドラーを使用してURLを作成します。
string strUrl = "/some/url/path" + myvar;
次に:
ScriptManager.RegisterStartupScript(Page, Page.GetType(), "popup", "window.open('" + strUrl + "','_blank')", true);
フィックスフォームのトリックは素晴らしいですが、:
新しいウィンドウに読み込まれるコードにアクセスできない場合があります。
あなたがそうしたとしても、あなたはそれが常にロードされ、エラーのない事実に依存しています。
そして、他のページがフィックスフォームをロードして実行する機会を得る前に、ユーザーが別のボタンをクリックしないという事実に依存しています。
代わりにこれを行うことをお勧めします:
OnClientClick="aspnetForm.target ='_blank';setTimeout('fixform()', 500);"
次のように、同じページに fixformを設定します。
function fixform() {
document.getElementById("aspnetForm").target = '';
}
このようにコードビハインドでも使用できます
ClientScript.RegisterStartupScript(this.Page.GetType(), "",
"window.open('page.aspx','Graph','height=400,width=500');", true);
window.open('page.aspx','_blank');
それを使用しても、新しいタブではなく、ナビゲーションバーが無効でナビゲーションボタンがない新しいウィンドウで開きます。
ポップアップメソッドは、訪問者に安全な質問をします。
ここに私の簡単な解決策があります:そしてあらゆる場所で働きます
<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();"/>
<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/
次のコードを使用して、新しいページを新しいタブで開くこともできます。
<asp:Button ID="Button1" runat="server" Text="Go"
OnClientClick="window.open('yourPage.aspx');return false;"
onclick="Button3_Click" />
そして、単にResponse.Redirect( "yourPage.aspx");を呼び出します。ボタンイベントの背後。
私は常にこのコードを使用しています... このコードを使用してください
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 ());
}
上記の@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','');
}
LinkButtonの代わりに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>
ここで行ったようにajaxを使用してasp.netコードの背後から新しいウィンドウを開くことができます 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);
}
前の例はどれもうまくいかなかったので、自分の解決策を投稿することにしました。ボタンクリックイベントで、背後にあるコードは次のとおりです。
Dim URL As String = "http://www.google/?Search=" + txtExample.Text.ToString
URL = Page.ResolveClientUrl(URL)
btnSearch.OnClientClick = "window.open('" + URL + "'); return false;"
新しいブラウザで開くには、他の誰かのresponse.redirectコードを変更する必要がありました。
私はこのアプローチを使用しました。ポップアップで何もする必要はありません(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タグに何も追加する必要はありません。この関数は、新しいウィンドウをセットアップし、同じ関数で修正します。
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);