답변:
방금 답을 찾았고 작동합니다. :)
서버 측 링크 / 버튼에 다음을 추가해야합니다.
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()">
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 스트림에 직접 쓸 수 있다면 다음과 같이 시도해 볼 수 있습니다.
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);
수정 양식 트릭은 깔끔하지만 :
새 창에로드되는 코드에 액세스하지 못할 수 있습니다.
그렇게하더라도 항상로드되고 오류가 없다는 사실에 의존합니다.
그리고 다른 페이지가 fixform을로드하고 실행할 기회를 갖기 전에 사용자가 다른 버튼을 클릭하지 않는다는 사실에 의존합니다.
대신 이렇게하는 것이 좋습니다.
OnClientClick="aspnetForm.target ='_blank';setTimeout('fixform()', 500);"
다음과 같이 동일한 페이지 에 수정 양식을 설정합니다 .
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"/>
그런 다음 SAME 페이지에서 참조되는 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>
여기 http://alexandershapovalov.com/open-new-window-from-code-behind-in-aspnet-68/ 처럼 ajax를 사용하여 asp.net 코드에서 새 창을 열 수 있습니다.
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();" />
자바 스크립트 :
function SetTarget() {
document.forms[0].target = "_blank";}
그리고 코드 숨김 :
Response.Redirect(URL);