دسترسی به مقدار View State در صفحه دیگر

جمعه 24 اردیبهشت 1395

میدانیم که به طور مستقیم نمی توانیم ، به مقدار viewstate در صفحه دیگر دسترسی پیدا کنیم اما به طور غیر مستقیم این امر امکان پذیر است.در این مقاله برخی از روشهایی که با استفاده از آنها می توانیم به مقدار viewstate در صفحه دیگر دسترسی داشته باشیم ،بیان میشود.

دسترسی به مقدار View State در صفحه دیگر

برخی از راه هایی که با استفاده از آنها  می توانید به مقدار viewstate در صفحه دیگر دسترسی داشته باشید.

1. استفاده از Query String

2. استفاده از Session State

3. استفاده از cookies

4. استفاده از cross Page Postback

در تصویر بالا چهار فیلد مانند زیروجود دارد:

     1. دانلود سورس کد

    2. بازدید

    3. لایک

    4. نمایش جزئیات

هنگامی که شما روی لینک "دانلود سورس کد" کلیک میکنید ، تعداد دانلود یک واحد افزایش می یابد ، و تعداد افرادی که مقاله را دانلود کرده اند را میشمارد.

هنگامی که شما صفحه را Refresh/Reload میکنید ، کانتر یک واحد اضافه میکند  ، و تعداد افرادی که مقاله را خواندند ، میشمارد.

هنگامی که شما روی "لایک" کلیک کنید ،کانتر یک واحد اضافه میکند، این تعداد افرادی را که like کرده اند را میشمارد.

و هنگامی که شما بر روی دکمه "بازدید"  کلیک کنید ،تمام جزئیات را در یک صفحه دیگر نشان میدهد.

صفحه ای مانند تصویر بالا طراحی میکنیم.

ویژوال استدیو را باز کرده ، وپس از آن یک ASP.NET Empty Website  بنام  CrossPageViewState  میسازیم.

روی پروژه کلیک راست کرده و گزینه  Add ، WebForm بنام  TestViewState میسازیم .

  کد زیر را داخل آن بنویسید.

TestViewState.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestViewState.aspx.cs" Inherits="CrossPageViewState.TestViewState" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:Image ID="img1" runat="server" ImageUrl="~/Images/c-sharp-corner-c-corner-logo-icon.jpg" ToolTip="CSharpCorner" />  
        <p style="height:30px; width:100%; background-color:blue; color:white; text-align:center; font-size:18px; font-family:Tahoma"> <a href="#" style="color:white">تکنولوژی </a> | <a href="#" style="color:white">پاسخ </a> | <a href="#" style="color:white">وبلاگ</a> | <a href="#" style="color:white">ویدئو</a> | <a href="#" style="color:white">
مصاحبه</a> | <a href="#" style="color:white">کتابها</a> | <a href="#" style="color:white">اخبار</a> | <a href="#" style="color:white">حرفه</a> </p>  
        <div align="center">  
            <table>  
                <tr style="text-align:center">  
                    <td> <b style="color:blue; font-size:30px">مقاله:-</b> </td>  
                    <td>  
                        <h1>Cross Page ViewState</h1> </td>  
                </tr>  
            </table>  
            <asp:LinkButton ID="lnkDownload" runat="server" Text="دانلود سورس کد" OnClick="lnkDownload_Click"></asp:LinkButton>    
            <asp:Label ID="lblDownload" runat="server" Font-Bold="true" Font-Size="40px" />         
            <asp:Image ID="imgView1" runat="server" ImageUrl="~/Images/view.jpg" ToolTip="View" />    
            <asp:Label ID="lblView" runat="server" Font-Bold="true" Font-Size="40px" />          
            <asp:ImageButton ID="imgLike" runat="server" ImageUrl="~/Images/like.png" ToolTip="likes" OnClick="imgLike_Click" />    
            <asp:Label ID="lblLike" runat="server" Font-Bold="true" Font-Size="40px" />               
            <asp:LinkButton ID="lnkViewDetails" runat="server" Text="نمایش جزئیات" OnClick="lnkViewDetails_Click" /> <br /><br /><br />  
            <p>********************<b> محتوای مقاله </b>*********************** </p>  
        </div>  
      

    </div>
    </form>
</body>
</html>

در حال حاضر ما تمام مقادیر field فرم بالا را در view state ذخیره و میخواهیم به آن در برخی از صفحه های دیگر دسترسی داشته باشیم . برای این کار باید کد زیر را به وب فرم بالا اضافه کنیم. میتوانیم این کار را با راه های زیادی انجام دهیم.

در مرحله اول ، از روش Query string استفاده میکنیم.

1. استفاده از Query string

TestViewState.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace CrossPageViewState
{
    public partial class TestViewState : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
             if (!Page.IsPostBack)  
            {  
                ViewState["Download"] = 0;  
                lblDownload.Text = ViewState["Download"].ToString();  
                View();  
                //ViewState["View"] = 1;  
                //lblView.Text = ViewState["View"].ToString();  
                ViewState["Like"] = 0;  
                lblLike.Text = ViewState["Like"].ToString();  
            }  
        }  
        public void View()  
        {  
            if (Application["View"] == null)  
            {  
                Application["View"] = 1;  
            }  
            else  
            {  
                int Temp = (int) Application["View"];  
                Temp += 1;  
                Application["View"] = Temp;  
            }  
            lblView.Text = Application["View"].ToString();  
        }  
        protected void lnkDownload_Click(object sender, EventArgs e)  
        {  
            int count = (int) ViewState["Download"];  
            count += 1;  
            ViewState["Download"] = count;  
            lblDownload.Text = ViewState["Download"].ToString();  
        }  
        protected void imgLike_Click(object sender, ImageClickEventArgs e)  
        {  
            int count = (int) ViewState["Like"];  
            count += 1;  
            ViewState["Like"] = count;  
            lblLike.Text = ViewState["Like"].ToString();  
        }  
        protected void lnkViewDetails_Click(object sender, EventArgs e)  
        {  
            int download = (int) ViewState["Download"];  
            int like = (int) ViewState["Like"];  
            Response.Redirect("ViewDetails.aspx?download=" + download + "&like=" + like);  
        }  
        }
    }

در حال حاضر صفحه دیگری با نام "ViewDetails.aspx"  به پروژه اضافه میکنیم و کد زیر را داخل آن مینویسیم.

ViewDetails.aspx :

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ViewDetails.aspx.cs" Inherits="CrossPageViewState.ViewDetails" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <p style="height:45px; width:100%; background-color:yellowgreen; color:white; text-align:center; font-size:30px; font-family:Tahoma">مشخصات مقاله</p> <br /><br />  
                <div align="center">  
                    <asp:Label ID="lblArticleStatus" runat="server" /> </div> 
    </div>
    </form>
</body>
</html>

ViewDetails.aspx.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace CrossPageViewState
{
    public partial class ViewDetails : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request.QueryString["download"] != null && Request.QueryString["like"] != null)
            {
                lblArticleStatus.Text = "<table border='1' width=40%><tr><th>عنوان</th><td>Cross Page ViewState</td><tr><th>بازدید</th><td>" + Application["View"] + "</td></tr><tr><th>لایک </th><td>" + Request.QueryString["like"].ToString() + "</td></tr><tr><th>دانلود</th><td>" + Request.QueryString["download"].ToString() + "</td></tr></table>";
            }
            else
            {
                Response.Redirect("TestViewState.aspx");
            }  
        }
    }
}

 

حالا به صفحه TestViewState.aspx بروید وبا استفاده از ctrl+f5 پروژه را اجرا کنید. بازدید =1 ، دانلود =0 ، لایک =0 . خواهید دید در هر بار بازخوانی صفحه (Refresh یا ReLoad) به مقدار بازدید یک واحد اضافه میشود و وقتی بروی دانلود/ لایک  کلیک کردید مقدار آنها افزایش مییابد و درنهایت هنگامی که برروی لینک نمایش جزئیات کلیک کنید ،  صفحه ViewDetails را  با افزودن تمام مقادیر  viewstate  در URL باز میکند.

2. استفاده از Session State

با استفاده از Session State میتوانیم ، مقدار view state را از یک صفحه به صفحه دیگر منتقل کنیم.

برای ذخیره مقدار در Session State از روش زیر استفاده میکنیم.

    int download = (int)ViewState["Download"];  
    int like = (int)ViewState["Like"];  
    Session["download"] =download;  
    Session["like"] = like;  

برای بازیابی:

lblArticleStatus.Text = "<table border='1' width=40%><tr><th>عنوان</th><td>Cross Page ViewState</td><tr><th>بازدید</th><td>" + Application["View"] + "</td></tr><tr><th>لایک</th><td>" + Session ["like"].ToString() + "</td></tr><tr><th>دانلود</th><td>" + Session ["download"].ToString() + "</td></tr></table>";  

3. استفاده از Cookies

همچنین با استفاده از کوکی ها میتوانیم ، مقدار view state را از یک صفحه به صفحه دیگر منتقل کنیم.

ذخیره مقدار در کوکی:

    HttpCookie objCookie1 = new HttpCookie("download");  
    objCookie1.Value = ViewState["Download"];  
    HttpCookie objCookie1 = new HttpCookie("like");  
    objCookie1.Value = ViewState["Like"];  
    Response.Cookies.Add(objCookie1);  
    Response.Cookies.Add(objCookie2);  

 

بازیابی از کوکی:

    if (Request.Cookies["download"] != null && Request.Cookies["like"] != null)  
    {  
       lblArticleStatus.Text = "<table border='1' width=40%><tr><th>عنوان</th><td>Cross Page ViewState</td><tr><th>بازدید</th><td>" + Application["View"] + "</td></tr><tr><th>لایک</th><td>" + Request.cookies["like"].value + "</td></tr><tr><th>دانلود</th><td>" + Request.cookies["download"].value + "</td></tr></table>";  
    }  
فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید