پیدا کردن کنترل و دسترسی آن از یک صفحه به صفحه دیگر در ASP.Net

در اینجا قصد داریم با یک مثال نشان دهیم که چگونه یک کنترل در ASP.Net می تواند با استفاده از C# از یک صفحه به صفحه دیگر دسترسی داشته باشد . روش CrossPagePostBack در ASP.Net با کمک از خاصیت PreviousPage شرایط پیدا کردن و دسترسی کنترل از صفحه قبلی به صفحه جاری را فراهم میکند.

پیدا کردن کنترل و دسترسی آن از یک صفحه به صفحه دیگر در ASP.Net

در اینجا قصد داریم با یک مثال نشان دهیم که چگونه یک کنترل در ASP.Net می تواند با استفاده از C# از یک صفحه به صفحه دیگر دسترسی داشته باشد . روش CrossPagePostBack در ASP.Net با کمک از خاصیت PreviousPage شرایط پیدا کردن و دسترسی کنترل از صفحه قبلی به صفحه جاری را فراهم میکند.

ساده ترین راهی که به ذهن هر فرد می آید، استفاده از Session متغیرها و ذخیره اشیاء کنترل در Session ، و دسترسی به آن در صفحه دیگر است. اما استفاده کردن Session  یک اشکال دارد که در حافظه سرور مانند RAM ذخیره می شود و مستقیما به طور متناسب به تعدادی از کاربران در یک زمان مشخص دسترسی می دهد. برای مثال اگر سایز اشیاء Session ، صد کیلوبایت باشد و هزار کاربر در حال حاضر به سایت دسترسی داشته باشند، کل حجم استفاده شده 100*1000 kb می شود.

در اینجا یک راه بهتر برای انجام چنین مثالی با استفاده از خاصیت  CrossPagePostBack  در ASP.net پیشنهاد می دهیم که به شما اجازه دسترسی به صفحه قبلی و کنترل آن را می دهد.

دو راه برای استفاده از  CrossPagePostBack  وجود دارد :

1. با تنظیم کردن خاصیت PostBackUrl از ASP.Net Button , LinkButton  و ImageButton  .

2. با استفاده از Server.Transfer

به عنوان دیتابیس ما در اینجا از  Northwind  مایکروسافت استفاده می کنیم .

از اینجا دانلود کنید. Download and install Northwind Database

یک GridView  و دو عدد  Button  به صورت زیر در صفحه اضافه میکنیم . کلید ها برای مسیردهی به صفحات استفاده می شود.


<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" Font-Names="Arial"
Font-Size="11pt" AlternatingRowStyle-BackColor="#C2D69B" HeaderStyle-BackColor="green">
<Columns>
    <asp:BoundField ItemStyle-Width="150px" DataField="CustomerID" HeaderText="CustomerID" />
    <asp:BoundField ItemStyle-Width="150px" DataField="City" HeaderText="City" />
    <asp:BoundField ItemStyle-Width="150px" DataField="Country" HeaderText="Country" />
    <asp:BoundField ItemStyle-Width="150px" DataField="PostalCode" HeaderText="PostalCode" />
</Columns>
<AlternatingRowStyle BackColor="#C2D69B" />
</asp:GridView>
<asp:Button ID="Button1" runat="server" Text="Button1" PostBackUrl = "~/Page2.aspx" />
<asp:Button ID="Button2" runat="server" Text="Button2" OnClick = "Redirect" />

به Namespace های زیر احتیاج دارید .


using System.Data;
using System.Configuration;
using System.Data.SqlClient;

Grid view  را با استفاده از جدول  Customer  به صورت زیر پر میکنیم .


protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        this.BindGrid();
    }
}
 
private void BindGrid()
{
    string constr = ConfigurationManager.ConnectionStrings["conString"].ConnectionString;
    using (SqlConnection con = new SqlConnection(constr))
    {
        using (SqlCommand cmd = new SqlCommand())
        {
            cmd.Connection = con;
            cmd.CommandText = "select top 10 * from customers";
            using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
            {
                DataTable dt = new DataTable();
                sda.Fill(dt);
                GridView1.DataSource = dt;
                GridView1.DataBind();
            }
        }
    }
}

مسیر دهی به صفحه دیگر با استفاده از CrossPagePostBack

 با توجه به اجرای CrossPagePostBack ، کلید 1 زمانی که کلید 2 از متد Server.Transfer  استفاده میکند  با PostBackUrl تنظیم می شود.


protected void Redirect(object sender, EventArgs e)
{
    Server.Transfer("~/Page2.aspx");
}

در صفحه مقصد، مرجع صفحه قبلی در خاصیت  Page.PreviousPage در دسترس است. کنترل در اینجا گریدویو به آسانی می تواند با استفاده از متد FindControl در دسترس باشد.


protected void Page_Load(object sender, EventArgs e)
{
    if (this.Page.PreviousPage != null)
    {
        GridView GridView1 = (GridView)this.Page.PreviousPage.FindControl("GridView1");
    }
}

حالا وقتی که Master Page  استفاده می شود، در ابتدا مرجع  ContentPlaceHolder مشخص می شود و کنترل گریدویو به آسانی با استفاده از FindControl در دسترس قرار می گیرد .


protected void Page_Load(object sender, EventArgs e)
{
    if (this.Page.PreviousPage != null)
    {
        Control ContentPlaceHolder1 = this.Page.PreviousPage.Master.FindControl("ContentPlaceHolder1");
        GridView GridView1 = (GridView)ContentPlaceHolder1.FindControl("GridView1");
    }
}

 

فایل های ضمیمه