[C#] 응답. 새 창으로 이동

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



답변

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

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

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


답변

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

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


답변

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

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

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

  3. 그리고 다른 페이지가 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);


답변

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