하고 싶지만 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);
답변
수정 양식 트릭은 깔끔하지만 :
-
새 창에로드되는 코드에 액세스하지 못할 수 있습니다.
-
그렇게하더라도 항상로드되고 오류가 없다는 사실에 의존합니다.
-
그리고 다른 페이지가 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에서는 서버 측에서 발생하므로 브라우저가 해당 작업을 수행하도록 지시 할 수 없으므로 이는 불가능합니다. 초기 창에는 무엇이 남습니까? 빈 페이지?