응답. 새 창으로 이동


118

하고 싶지만 Response.Redirect("MyPage.aspx")새 브라우저 창에서 엽니 다. 이전에 JavaScript 등록 스크립트 방법을 사용하지 않고이 작업을 수행했습니다. 어떻게 기억이 안나요?

답변:


114

방금 답을 찾았고 작동합니다. :)

서버 측 링크 / 버튼에 다음을 추가해야합니다.

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()">

2
이것은 자바 스크립트를 사용하여 양식의 대상을 변경하므로 아닙니다. 대신 페이지는 정상적으로 제출됩니다.
Toby Mills

또한 가상 디렉터리 외부의 페이지로 리디렉션하려는 경우 보안 위반이있을 수 있습니다.
Drejc

1
어떻게 든 내 경우에는 작동하지 않습니다. 새 창에서 동일한 페이지를 열고 해당 페이지에 대한 응답을 작성하고 있습니다. 그러나 마스터 페이지에 fixform () 메서드를 유지하면 문서가 null이라는 오류가 발생합니다. 왜 여전히 해결책을 찾으려고 던지고 있는지 확실하지 않습니다. onClientClick = "aspnetForm.target = '';"을 사용하여 임시 해결책을 찾았지만 해당 페이지의 다른 버튼에 대한 속성입니다.
JPReddy

1
난 그냥이 시도하고 대신 OnClientClick="aspnetForm.target ='_blank';"내가 가진 사용하기OnClientClick="document.getElementById('Form').target ='_blank';"
colincameron

예, 저에게 효과적이지만 새 창이 아닌 새 탭으로 페이지를 여는 것입니다. 새 창에서 내 페이지를 열려면 어떻게해야합니까?
Shilpa Soni 2014 년

61

이것을 확장 방법으로 사용할 수 있습니다.

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");

1
첫 번째 arrgument를 위해 무엇을 보내야합니까?
Raghuveera

야, 이것은 실제로 작동하는 환상적인 솔루션입니다! 감사합니다.
Klaus Nji 2014

재사용 가능한 탁월한 솔루션! 유일한 단점은 새 창이 팝업 차단기에 의해 차단된다는 것입니다.
MeanGreen

첫 번째 인수는 현재 Response 객체입니다.
Futureproof

의견을 보내 주셔서 감사합니다!
Sasa Tancev

26

Response.Redirect는 서버에서 시작되기 때문에이를 사용하여 수행 할 수 없습니다.

Response 스트림에 직접 쓸 수 있다면 다음과 같이 시도해 볼 수 있습니다.

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

3
이것은 작동하지만 CSS 또는 DIVS와 같은 내 버튼이 변경되는 페이지가 영향을 받고 있습니다.
Etienne

앞뒤로 이동할 때마다 새 창이 나타납니다.
devXen

26

클릭 이벤트 핸들러를 통해 URL을 구성하십시오.

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

그때:

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

팝업 차단기는 URL을 차단합니다.
Rafay 2011

3
이 예제에서 window.open은 사용자 작업이 아닌 코드에 의해 시작되므로 항상 '팝업'으로 처리됩니다. 사용자가 요소를 클릭 할 때 window.open이 호출되면 브라우저에서 차단 된 팝업 동작을 회피해야합니다.
steve

@steve, 이것은 훌륭하고 매우 간단한 솔루션입니다. Response.Redirect에 대한 귀하의 접근 방식을 팝업으로 리디렉션했습니다.
Sunil 2014

14

수정 양식 트릭은 깔끔하지만 :

  1. 새 창에로드되는 코드에 액세스하지 못할 수 있습니다.

  2. 그렇게하더라도 항상로드되고 오류가 없다는 사실에 의존합니다.

  3. 그리고 다른 페이지가 fixform을로드하고 실행할 기회를 갖기 전에 사용자가 다른 버튼을 클릭하지 않는다는 사실에 의존합니다.

대신 이렇게하는 것이 좋습니다.

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

다음과 같이 동일한 페이지 에 수정 양식을 설정합니다 .

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

11

이런 식으로 코드 뒤에서 사용할 수도 있습니다.

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

2
이것은 나에게 잘 작동하며 기본적으로 위의 Abhishek Shrivastava 솔루션의 짧은 버전입니다. 그러나주의해야 할 몇 가지주의 사항이 있습니다. 먼저 팝업 차단기가 실행됩니다. 특히, Safari가 차단 된 팝업에 대한 메시지를 표시하지 않고 팝업 예외를 허용하지 않기 때문에 팝업 차단기가 활성화 된 경우 Safari 5.0에서는 전혀 작동하지 않습니다. 둘째, Chrome은 window.open에 대한 페이지 인수를 무시합니다. 따라서 사용하더라도 window.open('page.aspx','_blank');탐색 막대가 비활성화되고 새 탭 대신 탐색 버튼이없는 새 창에서 열립니다.
Kasey Speakman 2011 년

8

Response.Redirect에서는 서버 측에서 발생하므로 브라우저가 해당 작업을 수행하도록 지시 할 수 없으므로 이는 불가능합니다. 초기 창에는 무엇이 남습니까? 빈 페이지?


8

팝업 방법은 방문자에게 안전한 질문을 제공합니다 ..

여기 내 간단한 해결책이 있습니다.

<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();"/>

적어도 6자가 아니기 때문에 게시물을 편집 할 수 없지만 '( "href")'가 아니라 '[ "href"]'
Nickso


4

포스트 백 할 필요가 없도록 코드를 재구성 할 수있는 경우 버튼의 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

다음 코드를 사용하여 새 탭에서 새 페이지를 열 수도 있습니다.

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

그리고 Response.Redirect ( "yourPage.aspx"); 버튼 이벤트 뒤에.


이 메서드는 OnClientClickonclick을 모두 트리거합니다 . 일부 페이지뿐만 아니라 어떤 행동이 동일한 페이지에서 수행되었을 때 새 창에서 열립니다 의미
매니 바난 Nagarajan을

3

나는 항상이 코드를 사용한다 ... 이 코드를 사용하라

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 ());
     }

이 코드는 CSS 클래스에 영향을주지 않으므로 부모 창은 전혀 영향을받지 않습니다 !!
Abhishek Shrivastava

1
음, 이것은 확실히 MVC에 대한 강력한 주장입니다. 코드에서 아무것도 빼앗지 마십시오. 그것과는 거리가 멀다. 웹 양식을 대표하는 것은 이런 것입니다.
MrBoJangles 2010

이 모든 코드는 한 줄로 요약 할 수 있습니다. 아래의 shalu의 솔루션을 참조하십시오. 똑같은 효과이지만 불필요한 팽창은 없습니다.
Kasey Speakman

1

위의 @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','');
}

1

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>

0

Page.RegisterStartupScript를 사용하여 페이지로드시 자바 스크립트가 실행되도록 할 수 있습니다.


0

여기 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);
}

0

이전 예제 중 어느 것도 저에게 효과가 없었기 때문에 솔루션을 게시하기로 결정했습니다. 버튼 클릭 이벤트에서 뒤에 코드가 있습니다.

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

이 접근 방식을 사용했는데 팝업에서 아무것도 할 필요가 없습니다 (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

linkbutton에 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

HTML

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

자바 스크립트 :

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

그리고 코드 숨김 :

Response.Redirect(URL); 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.