Thursday, October 21, 2021

Server.Transfer vs Server.Execute vs Response.Redirect Asp.net நேவிகேசன் டெக்னிக்ஸ்.

 


 

 ஏ எஸ் பி .நெட்டில் பேஜ் நேவிகேசன் முறைகள் யாது?

அல்லது

ஏ எஸ் பி .நெட்டில் ஒரு வெப் ஃபார்மில் இருந்து மற்றொரு வெப் ஃபார்மிற்கு எவ்வாறு இடம் பெயருகின்றோம்?

அல்லது.

ஏஎஸ்பி.நெட்டில் எவ்வாறு பக்கங்கள் லிங்க் செய்யப்படுகின்றன?

இது காமன் இன்டெர் வியூ கேள்வி ஆகும்.

ஏஎஸ்பி டாட் நெட்டில் ஒரு பக்கத்தில் இருந்து மற்றொரு பக்கத்திற்கு செல்ல ஒன்றுக்கு மேற்பட்ட வழிமுறைகள் உள்ளன.ஹைபர் லிங்க் கண்ட்ரோல் –இது ஒரு பக்கத்தில் இருந்து மற்றொரு பக்கத்திற்கு நேவிகேட் செய்ய பயன்படுகின்றது.நாம் எந்த பக்கத்திற்கு செல்ல வேண்டுமோ அது NavigateUrl பிராப்பர்ட்டிக்கு மதிப்பிருத்தப்படுகின்றது. ஹைபர் லிங்கை பயன்படுத்தி அதே அப்ளிகேசனில் உள்ள மற்றொரு பக்கதிற்க்கோ  அல்லது மற்றொரு வெப் பக்கத்கிற்கோ செல்லலாம்.ஏஎஸ்பி டாட்நெட் எஞ்சின் ஹைபர்லிங்க் கன்ட்ரோலை html ஆங்கர் டேக்காக மொழி பெய்ர்ப்பு செய்கின்றது.

மற்ற வழி முறைகள்

1)  Response.Redirect 

2)  Server.Transfer 

3)  Server.Execute

4)  Cross-Page postback

5)     Window.Open 

 

Response.Redirect

இது கிட்டத்தக்க ஹைபர்லிங்க் கண்ட் ரோலை போன்றே செயற்படுகின்றது.

ஹைபர் லிங்க் கன்ட்ரோல் ஆனது எந்த ஒரு சர்வர் சைட் ஈவண்ட்டையும் கொண்டிருக்கவில்லை.எனவே ஹைபர் லிங்கை கிளிக் செய்யும் பொழுது அதை இன்டெர்செப்ட் செய்ய எந்த விதமான சர்வர் சைட் ஈவன்ண்டும் கிடையாது.

என்வே ஒரு பட்டன் அல்லது லிங்க் பட்டன் அல்லது இமேஜ் பட்டன் போன்றவற்றை பயன்படுத்தி அதன் கிளிக் ஈவண்டில் Response.Rediect மெத்தடை அழைக்க வேண்டும். கிளையண்ட்டில் ஒரு பட்டனை கிளிக் செய்யும் பொழுது சர்வர் ஆனது ரீடைரக்க்சனிற்கான கோரிக்கையை பெறுகின்றது. சர்வர் ஆனது ரெஸ்பான்ஸ் ஹெட்டரை திருப்பி அனுப்புகின்றது.இப்பொழுது கிளையண்ட் தானியியங்கி முறையில் Get ரெக்வஸ்டை அனுப்புகின்றது.இப்பொழுது சர்வர் புதிய பக்கத்தை திரும்ப அனுப்புகின்றது. ஆகையால் Response.Redirect முறையில் இரண்டு request/response சைக்கிள்கள் உள்ளன.

 


 

ஆனால் மற்ற முறைகள் ஆன Server.Transfer மற்றும் Server.Execute போன்றவை ஒரு Request/Response சைக்கிள் தான் உள்ளது.

Response.Redirect பயன்படுத்தும் பொழுது பிரவுசர் url ஆனது மாறுகின்றது.

பிரவுசர் ஹிஸ்டரி மெயிண்டைன் செய்யப்படுகின்றது.Response.Redirect பயன்படுத்தி அதே அப்ளிகேசனிற்க்குள்ளோ அல்லது வேறொரு அப்ளிகேசனிற்க்கோ செல்லலாம்.இது இந்த மெத்தட் ஆனது Server.Transfer மற்றும் Server.Execute –ல் இருந்து மாறுபடுகின்றது. இவற்றை பயன்படுத்தி அதே அப்ளிகேசனிற்க்குள் மட்டும் நேவிகேட் செய்ய இயலும். பிரவுசர் url ம் மாறாது.

Server.Transfer

விசுவல் ஸ்டுடியோவில் ஒரு வெப் அப்ளிகேசனை உருவாக்கி இரண்டு வெப் ஃபார்ம்களை உருவாக்க வேண்டும்.வெப் ஃபார்ம் 1-ல் கீழ்கண்ட கோடிங்கை காப்பி பேஸ்ட் செய்யவும்.

<div style="font-family: Arial">
    <table>
        <tr>
            <td colspan="2">
                <h1>
                    This is WebForm1</h1>
            </td>
        </tr>
        <tr>
            <td>
                <b>Name</b>
            </td>
            <td>
                :<asp:TextBox ID="txtName" runat="server">
                </asp:TextBox>
            </td>
        </tr>
        <tr>
            <td>
                <b>Email</b>
            </td>
            <td>
                :<asp:TextBox ID="txtEmail" runat="server">
                </asp:TextBox>
            </td>
        </tr>
        <tr>
            <td colspan="2">
                <asp:Button ID="btnTransfer" runat="server" 
                    Text="Transfer to WebForm2" Width="250px" 
                    OnClick="btnTransfer_Click"/>
            </td>
        </tr>
        <tr>
            <td colspan="2">
                <asp:Button ID="btnTransferToExternalWebsite" 
                runat="server" Width="250px" 
                OnClick="btnTransferToExternalWebsite_Click" 
                Text="Transfer to External WebSite"/>
            </td>
        </tr>
    </table>
</div>

 

வெப் ஃபார்ம் 1 –ற்க்கன கோட் பிகைண்ட் நிரல் வரிகள்.

protected void btnTransfer_Click(object sender, EventArgs e)
{
    //Send the user to webform2 using Server.Transfer
    //Set the boolean parameter preserveForm=true
    //This ensures that the posted form values can be retrieved
    //Since the default value for this parameter is true, the 
    //form values are preserved, even if this parameter is not used.
    Server.Transfer("~/WebForm2.aspx", true);
}
protected void btnTransferToExternalWebsite_Click(object sender, EventArgs e)
{
    //Transfer to websites/pages on a different web server causes
    //runtime error
    Server.Transfer("http://pragimtech.com/home.aspx");
}

WebForm2.aspx code:
<div>
    <table>
        <tr>
            <td>
                <b>Name</b>
            </td>
            <td>
                :<asp:Label ID="lblName" runat="server">
                </asp:Label>
            </td>
        </tr>
        <tr>
            <td>
                <b>Email</b>
            </td>
            <td>
                :<asp:Label ID="lblEmail" runat="server">
                </asp:Label>
            </td>
        </tr>
    </table>
</div>

protected void Page_Load(object sender, EventArgs e)
{
    //Get the form values from the previous page
    System.Collections.Specialized.NameValueCollection nameValueCollection =
        Request.Form;

    lblName.Text = nameValueCollection["txtName"];
    lblEmail.Text = nameValueCollection["txtEmail"];

    //Page previousPage = this.Page.PreviousPage;
    //if (previousPage != null)
    //{
    //    TextBox previousPageNameTextBox = (TextBox)previousPage.FindControl("txtName");
    //    lblName.Text = previousPageNameTextBox.Text;

    //    TextBox previousPageEmailTextBox = (TextBox)previousPage.FindControl("txtEmail");

    //    lblEmail.Text = previousPageEmailTextBox.Text;
    //}
}


மேலே உள்ள வெப் ஃபார்ம் ஒன்றில் நேம்  இமெயில் ஆகியவற்றை உள்ளீடு செய்து முதல் பட்டனை கிளிக் செய்யவும்.இப்பொழுது கனட் ரோல் வெப் ஃபார்ம்2-விற்க்கு ரீடைரக்ட் ஆகும்.


முதல் ஃபார்ம் –இல் நாம் உள்ளீடு செய்யப்பட்டவை இரண்டாவது ஃபார்மிற்கு கடத்தப்பட்டு அவை ஃபார்ம் இரண்டில் காட்சி படுத்தப்படுகின்றன.

அதாவது Server.Transfer ஆனது முதல் ஃபார்மில் இருந்து இரண்டாவது ஃபார்மிற்கு நேவிகேட் செய்கின்றது.

Response.Redirect மற்றும் Server.Transfer வித்தியாசங்கள்.

1.      ஹைபர் லிங்க் மற்றும் Response.Redirect போன்றே Server.Transfer-ம் அதே அப்ளிகேசனில் உள்ள மற்றொரு பக்கத்திற்கு நேவிகேட் செய்ய பயன்படுகின்றது.

2.      Server.Transfer மற்ற வெப் சர்வரில் உள்ள மற்ற அப்ளிகேசனுக்கு நேவிகேட் செய்ய இயலாது.

3.      Server.Transfer பிரவுசர் url –ஐ மாற்றாது.

4.      Server.Transfer ஆனது Response.Redirect ஐ காட்டிலும் வேகமாக செயற்படுகின்றது ஏனெனில் இந்த மெத்தடில் ஒரு request/response சைக்கிள் தான்.

5.      Server.Transfer கொண்டு ஒரு ஃபார்மில் உள்ள வேரியபிள் மதிப்புகளை தக்க வைக்கலாம்.

 

 


 

 

Server.Execute

Server.Execute மற்றும் Server.Transfer ஒற்றுமைகள்.

1.      பிரவுசர் url ஆனது மாறுவதில்லை.

2.      இரண்டு மெத்தடிலும் அதே அப்ளிகேசனுக்குள் உள்ள பக்கங்களுக்கு மட்டுமே நேவிகேட் செய்ய இயலும்.மற்ற வெப் சர்வரில் உள்ள பக்கத்திற்கு செல்லும் பொழுது ரன் டைம் எக்ஸ்செப்சன் நிகழும்.

3.      இரண்டு மெத்தடிலும் முதல் ஃபார்மில் உள்ள வேரியபிள் மதிப்பு தக்கவைக்கப்படுகின்றது.

Server.Transfer மற்றும் Server.Execute வித்தியாசம்.

Server.Transfer முதல் பக்கத்தில் உள்ள கனக்சனை டெர்மினேட் செய்து இரண்டாவது பக்கதிற்க்கு புதிதாய் இயக்கத்தை தொடக்குகின்றது.

Server.Execute ஆனது முதல் ஃபார்மில் உள்ள இயக்கத்தை டெர்மினேட் செய்யாமலே இரண்டாவது பக்கத்திற்கு செல்லுகின்றது.முதல் வெப் ஃபார்மில் இயக்கத்தை முடித்த பிறகு இரண்டாவது செல்லுகின்றது.


WebForm1.aspx.cs code:


protected void btnExecute_Click(object sender, EventArgs e)
{
    Server.Execute("~/WebForm2.aspx", true);
    lblStatus.Text = "The call returned after processing the second webform";
}
protected void btnExecuteToExternalWebsite_Click(object sender, EventArgs e)
{
    Server.Execute("http://pragimtech.com/home.aspx");
}

 

WebForm2.aspx.cs code:


protected void Page_Load(object sender, EventArgs e)
{
    System.Collections.Specialized.NameValueCollection previousFormcollection = Request.Form;
    lblName.Text = previousFormcollection["txtName"];
    lblEmail.Text = previousFormcollection["txtEmail"];

    //Page previousPage = Page.PreviousPage;
    //if (previousPage != null)
    //{
    //    lblName.Text = ((TextBox)previousPage.FindControl("txtName")).Text;
    //    lblEmail.Text = ((TextBox)previousPage.FindControl("txtEmail")).Text;
    //}
}

cross page posting.

பொதுவாக கிராஸ் பேஜ் போஸ்டிங்க் ஆனது ஒரு பக்கத்தில் இருந்து மற்ற பக்கத்திற்கு போஸ்ட் செய்கின்றது. பொதுவாக ஒரு பக்கத்தை கிளிக் செய்யும் பொழுது அதே பக்கத்திற்கு போஸ்ட் பேக் செய்யப்படுகின்றது. ஆனால் அந்த பட்டனின் postbackurl பிராப்பர்ட்டிக்கு எந்த பக்கத்திற்கு செல்ல வேண்டுமோ அதை மதிப்பிருத்தினால் அந்த ப்ட்டனை கிளிக் செய்யும் பொழுது கன்ட் ரோல் ஆனது அந்த பக்கத்திற்கு இடம் பெயருகின்றது.

பட்ட்னின் postbackurl ஆனது webform2 –என மதிப்பிருத்தப்படிருப்பதை கவனிக்கவும்.

 

<div style="font-family: Arial">
    <table>
        <tr>
            <td colspan="2">
                <h1>
                    This is WebForm1</h1>
            </td>
        </tr>
        <tr>
            <td>
                <b>Name</b>
            </td>
            <td>
                :<asp:TextBox ID="txtName" runat="server">
                </asp:TextBox>
            </td>
        </tr>
        <tr>
            <td>
                <b>Email</b>
            </td>
            <td>
                :<asp:TextBox ID="txtEmail" runat="server">
                </asp:TextBox>
            </td>
        </tr>
        <tr>
            <td colspan="2">
                <asp:Button ID="btnCrossPagePostback" runat="server" 
                Text="Cross Page Postback - WebForm2" 
                Width="250px" PostBackUrl="~/WebForm2.aspx"/>
            </td>
        </tr>
        <tr>
            <td colspan="2">
                <asp:Button ID="Button1" runat="server" onclick="Button1_Click" 
                    Text="Server.Transfer - WebForm2" Width="250px" />
            </td>
        </tr>
        </table>
</div>

WebForm1.aspx.cs code:
protected void Button1_Click(object sender, EventArgs e)
{
    Server.Transfer("~/WebForm2.aspx");
}

WebForm2.aspx code:
<div style="font-family: Arial">
    <table>
        <tr>
            <td colspan="2">
                <h1>This is WebForm2</h1>
            </td>
        </tr>
        <tr>
            <td>
                <b>Name</b>
            </td>
            <td>
                :<asp:Label ID="lblName" runat="server">
                </asp:Label>
            </td>
        </tr>
        <tr>
            <td>
                <b>Email</b>
            </td>
            <td>
                :<asp:Label ID="lblEmail" runat="server">
                </asp:Label>
            </td>
        </tr>
        <tr>
            <td colspan="2">
                <asp:Label ID="lblStatus" runat="server"
                ForeColor="Red" Font-Bold="true"></asp:Label>
            </td>
        </tr>
        </table>
</div>

WebForm2.aspx.cs code: Page.IsCrossPagePostBack Property is used to indicate whether the page is involved in a cross-page postback.
protected void Page_Load(object sender, EventArgs e)
{
    Page previousPage = Page.PreviousPage;
    if (previousPage != null && previousPage.IsCrossPagePostBack)
    {
        lblName.Text = ((TextBox)previousPage.FindControl("txtName")).Text;
        lblEmail.Text = ((TextBox)previousPage.FindControl("txtEmail")).Text;
    }
    else
    {
        lblStatus.Text = "Landed on this page using a technique other than cross page post back";
    }
}

Window.open().

இது ஒரு ஜாவாஸ்கிரிப்ட் மெத்தட் ஆகும்.. இந்த மெத்தட் கொண்டு புதிய விண்டோவை ஓபன் செய்யலாம்.

இதன் சிண்டாக்ஸ்.

window.open(URL, name, features, replace)

சான்று நிரல்.

HTML of WebForm1.aspx
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Training Demo</title>
    <script type="text/javascript">
        // Javascript function to open the new window
        function OpenNewWindow() 
        {
            var Name = document.getElementById('txtName').value;
            var Email = document.getElementById('txtEmail').value;

window.open('WebForm2.aspx?Name=' + Name + '&Email=' + Email, '_blank', 'toolbar=no, location=no, resizable=yes, 

width=500px, height=500px', true);
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
<div style="font-family: Arial">
    <table>
        <tr>
            <td colspan="2">
                <h1>
                    This is WebForm1</h1>
            </td>
        </tr>
        <tr>
            <td>
                <b>Name</b>
            </td>
            <td>
                :<asp:TextBox ID="txtName" runat="server">
                </asp:TextBox>
            </td>
        </tr>
        <tr>
            <td>
                <b>Email</b>
            </td>
            <td>
                :<asp:TextBox ID="txtEmail" runat="server">
                </asp:TextBox>
            </td>
        </tr>
        <tr>
            <td colspan="2">
                <input id="Button1" type="button" value="HTML Input Button - Window.Open" 
                    onclick="OpenNewWindow()" style="width: 300px"
                />
            </td>
        </tr>
        <tr>
            <td colspan="2">
                <asp:Button ID="Button2" runat="server" 
                    Text="ASP.NET Button - Window.Open()" onclick="Button2_Click" 
                    Width="300px" />
            </td>
        </tr>
        </table>
</div>
    </form>
</body>
</html>

Code-Behind code for WebForm1.aspx.cs
protected void Button2_Click(object sender, EventArgs e)
{
    string strJavascript = "<script type='text/javascript'>window.open('WebForm2.aspx?Name=";
    strJavascript += txtName.Text + "&Email=" + txtEmail.Text + "','_blank');</script>";
    Response.Write(strJavascript);
}

HTML of WebForm2.aspx
<div style="font-family: Arial">
    <table>
        <tr>
            <td colspan="2">
                <h1>This is WebForm2</h1>
            </td>
        </tr>
        <tr>
            <td>
                <b>Name</b>
            </td>
            <td>
                :<asp:Label ID="lblName" runat="server">
                </asp:Label>
            </td>
        </tr>
        <tr>
            <td>
                <b>Email</b>
            </td>
            <td>
                :<asp:Label ID="lblEmail" runat="server">
                </asp:Label>
            </td>
        </tr>
        </table>
</div>

Code-Behind code for WebForm2.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
    lblName.Text = Request.QueryString["Name"];
    lblEmail.Text = Request.QueryString["Email"];
}

நன்றி.

முத்து கார்த்திகேயன்,மதுரை.

 

ads Udanz