باز کردن نتیجه Response.Redirect یا Server.Transfer در پنجره جدید با ASP.Net
باسلام یک سوال در مورد نحوه استفاده از Respose.Redirect یا Server.Transfer برای باز کردن یک پنجره جدید در ASP.Net وجود داشت. واقعیت این است که به طور مستقیم هر دو این روش صفحه شما را در پنجره جدید باز نمی کند، از این رو شما باید از ترفندهای زیر برای دستیابی به آن استفاده کنید.
1. تنظیم ویژگی هدف FORM
تگ فرم HTML دارای ویژگی هدف است که می تواند برای باز کردن یک پنجره جدید هنگام ارسال فرم به سرور استفاده شود. برای اطلاعات بیشتر اینجا را مطالعه کنید
HtmlForm.Target Property
بنابراین با استفاده از جاوا اسکریپت می توانیم هر بار که می خواهیم صفحه را در یک پنجره جدید باز کنیم ومی توانیم ویژگی هدف فرم را به _blank تنظیم کنیم. به کد زیر مراجعه کنید .
<asp:Button ID="Button1" runat="server" Text="Button"
onclick="Button1_Click" OnClientClick = "SetTarget();" />
از عملکرد OnScreenClick روی عملکرد جاوا اسکریپت SetTarget استفاده می کنیم رویداد کنترل دکمه ASP.Net که در زیر شرح داده شده است
<script type = "text/javascript">
function SetTarget() {
document.forms[0].target = "_blank";
}
</script>
همانطور که در بالا می بینید می توانیم مشخصه هدف HTML فرم را به _blank تنظیم کنیم
در مرحله دوم، متد Button1_Click را بر روی رویداد کنترل Onclick فراخوانی می کنیم، همانطور که در زیر شرح داده شده است :
C #
protected void Button1_Click(object sender, EventArgs e)
{
Response.Redirect("page2.aspx");
}
VB.Net
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Response.Redirect("Page2.aspx")
End Sub
زمانی که روی دکمه کلیک میکنید، تابع جاوا اسکریپت ویژگی مشخصی از فرم را به _blank تنظیم می کند. بنابراین هنگامی که PostBack اتفاق می افتد، ابتدا صفحه فعلی را در پنجره جدید باز می کند و سپس روش Response.Redirect را اجرا می کند و به ما کمک می کند تا به هدفمان برسیم.
در همان روش ما می توانیم از Server.Transfer در رویداد Button Click استفاده کنیم
C #
protected void Button1_Click(object sender, EventArgs e)
{
Server.Transfer("page2.aspx");
}
VB.Net
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Server.Transfer("Page2.aspx")
End Sub
تنها تفاوت این است که هر دوپنجره همان URL را نمایش می دهند هر چند صفحات مختلف را نمایش می دهند
اما همانطور که در W3C است، هدف این روش یک ویژگی معتبر در XHTML 1.1 نیست، هرچند که با تمام مرورگرهای اصلی کار می کند.
از این رو راه دیگری برای تغییر مسیر به یک پنجره جدید استفاده از JavaScript window.open است .
2. با جاوا اسکریپت window.open
با استفاده از ClientScript می توانیم یک پنجره جدید از طرف سرور را به روش زیر باز کنیم
C #
protected void Button2_Click(object sender, EventArgs e)
{
string url = "page2.aspx";
StringBuilder sb = new StringBuilder();
sb.Append("<script type = 'text/javascript'>");
sb.Append("window.open('");
sb.Append(url);
sb.Append("');");
sb.Append("</script>");
ClientScript.RegisterStartupScript(this.GetType(),
"script", sb.ToString());
}
VB.Net
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim url As String = "page2.aspx"
Dim sb As New StringBuilder()
sb.Append("<script type = 'text/javascript'>")
sb.Append("window.open('")
sb.Append(url)
sb.Append("');")
sb.Append("</script>")
ClientScript.RegisterStartupScript(Me.GetType(), _
"script", sb.ToString())
End Sub
بنابراین می توانید یک پنجره جدید با استفاده از جاوا اسکریپت از طرف سرور باز کنید. در نهایت اگر شما هر دو تکنیک را مقایسه کنید، همین کار را انجام می دهید .